【DailyFresh】课程记录3--商品搜索相关,2024年最新三年经验Java开发面经总结

对某些字段内容进行关键词分析,将其分解成对应的关键词,并建立关键词对应的索引数据

好吃

草莓:sku_id1 sku_id2 sku_id5

字典

全文检索框架:

可以帮助用户使用搜索引擎

配合全文检索框架使用whoosh引擎,帮助用户搜索数据

P67 商品搜索-全文检索框架和引擎的安装和配置

全文检索框架:haystack

搜索引擎:whoosh

pip3 install django-haystack

pip3 install whoosh

在settings.py中的INSTALLED_APPS:注册全文检索框架haystack

配置haystack和whoosh:

# 全文检索框架的配置

HAYSTACK_CONNECTIONS = {

‘default’: {

使用whoosh引擎

‘ENGINE’: ‘haystack.backends.whoosh_backend.WhooshEngine’,

索引文件路径

‘PATH’: os.path.join(BASE_DIR, ‘whoosh_index’),

}

}

# 当添加、修改、删除数据时,自动生成索引

HAYSTACK_SIGNAL_PROCESSOR = ‘haystack.signals.RealtimeSignalProcessor’

配置实际上在django-haystack包中

cd xxxx/venv/lib/python3.x/site-packages/

cd haystack/

cd backends/

其中的ChineseAnalyzer.py和whoosh_cn_backend.py原始安装完是没有的

原始配置应该是:

haystack.backends.whoosh_backend.WhooshEngine

P68 商品搜索-生成索引文件

最终是要根据GoodsSKU类对应表中的数据生成索引数据

1. 新建一个GoodsSKU类对应的索引类,在apps.goods下方,即模型类所在的应用新建文件search_indexes.py

2. 在文件search_indexes.py中定义索引类

# 定义索引类

from haystack import indexs

# 导入你的模型类

from goods.models import GoodsSKU

# 指定对于某个类的某些数据建立索引

# 索引类名格式: 模型类名+Index

class GoodsSKUIndex(indexes.SearchIndex, indexes.Indexable):

索引字段

document=True说明text为索引字段

建立GoodsSKU类对应的表中的数据的索引信息 use_template指定根据表中的哪些字段建立索引文件,把说明放在一个文件中

text = indexes.CharField(document=True, use_template=True)

def get_model(self):

返回你的模型类

return GoodsSKU

建立索引的数据

该方法最终返回哪些内容,就会对哪些内容建立索引

self.get_model()返回的是GoodsSKU,self.get_model().objects.all()则表示查询该表中的所有数据,因此对该表中的所有数据建立索引

def index_queryset(self, using=None)

return self.get_model().objects.all()

总结三点

1.导入模型类

2.索引类名格式:模型类名+Index

3.get_model中返回你的模型类

use_template指定根据表中的哪些字段建立索引文件,把说明放在一个文件中

文件格式:

在templates中创建search/indexes/你的模型类所在app/模型类名小写_text.txt

templates/search/indexes/goods/goodssku_text.txt

# 在该文件中指定根据表中的哪些字段建立索引数据

{{ object.模型类的属性 }}

{{  }}

{{ object.name }} # 根据商品的名称建立索引

{{ object.desc }} # 根据商品的简介建立索引

# 根据商品的详情建立索引

{{ object.goods.detail }} # 根据商品的详情建立索引

接下来生成索引数据:

进入自己的项目,通过manage.py生成索引数据

python3 manage.py rebuild_index

P69 商品搜索-全文检索的使用

有了索引文件之后可以借助全文检索引擎帮助我们搜索数据

找到base.html中的搜索部分,将其放入一个表单中,其中的method="get"和name="q"固定,其余不固定

此时点击之后会访问该地址/search,该地址对应的处理, 我们的目的是借助搜索引擎,因此我们需要去配置该地址,将其匹配完之后对应的处理应该交给搜索引擎去做

配置地址:

path(‘search/’, include(‘haystack.urls’)) # 全文检索框架

我们点击搜索之后访问/search地址,最终匹配之后的处理过程就不用管了,此时请求已经交给haystack。

全文检索结果:

搜索出结果后,haystack会把搜索出的结果传递给template/search目录下的search.html,传递的上下文包括:

query: 搜索关键字

page: 当前页的page对象—》遍历page对象,获取到的是SearchResult类的实例对象,对象的属性object才是模型类的对象。

paginator:分页paginator对象

通过HAYSTACK_SEARCH_RESULTS_PER_PAGE 可以控制每页显示数量

在templates/search目录下创建一个search.html

query: 搜索关键字

page: 当前页的page对象—在搜索完之后,它在传递数据时会对搜索的结果进行分页,然后会把当前页的page对象传过来,这里的page对象和之前的page对象是一样的,所以可以遍历page对象获取里面的数据。

遍历page对象,获取到的是SearchResult类的实例对象,在这个对象中包含了商品的数据,如何获取到实例对象中包含的数据?该实例对象中有个属性为object,这个object就是模型类所包含的对象

对象的属性object才是模型类的对象。

search_test.html

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

总结

无论是哪家公司,都很重视高并发高可用的技术,重视基础,重视JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

最后我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。

面试了阿里,滴滴,网易,蚂蚁,最终有幸去了网易【面试题分享】

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

最后我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。

[外链图片转存中…(img-VW6548FD-1712787730380)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-rncui0LG-1712787730380)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值