东莞市企业网站制作企业,深圳做网站外包公司,虚拟展馆官方网站建设,冒用公司名做网站在我自己做项目使用ES的时候#xff0c;发现了黑马没教的方法#xff0c;以及一些它项目的小问题 搜索时的匹配方法
这个boolQuery().should
我的项目是通过文章的标题title和内容content来进行搜索
但是黑马它的项目只用了must
如果我们的title和content都用must#x…在我自己做项目使用ES的时候发现了黑马没教的方法以及一些它项目的小问题 搜索时的匹配方法
这个boolQuery().should
我的项目是通过文章的标题title和内容content来进行搜索
但是黑马它的项目只用了must
如果我们的title和content都用must那么我们的搜索内容就是 必须同时匹配到content和title 这样子是错误的
所以我们用should这个是我们可能匹配到
可以这样子理解
must表示必须should表示或者 自动补全的字段必须是Completion类型 我们的自动补全的Suggestion字段其实是一个List一样的类型
所以我们的java代码中的对象是List类型
我的项目中我是把city和title这两个放到我们的List中然后这个来实现我们的自动补全 黑马项目的自动补全的不足
首先黑马的教程提出了一个例子
狮子和虱子我们搜索的时候不应该都转成拼音shizi
这样子就会导致两个都搜索出来从而导致我们的搜索结果的错误 所以我们创建时的分词器用拼音搜索时的分词器就不用拼音了
我们指定两种分词器这样就决定了我们的索引库的结构
analyzer是我们的创建时的分词器
search_analyzer是我们的搜索时的分词器 这样我们就实现了中文搜索的时候用中文搜索然后拼音搜索的时候用拼音搜索
我们搜索 动 成功用中文搜索了 我们搜索dong 也成功用拼音搜索搜到了 东 也就是说我们的ES的搜索是没有问题因为我们的索引的结构已经指定了
中文搜索的时候使用中文 英文搜索的时候使用英文 但是我们的自动补全其实有问题
我们的suggestion自动补全字段其实也是要中文搜索的时候补全中文拼音搜索的时候补全拼音
但是黑马的教程里面它的自动补全没有中文搜索的时候补全中文
如果我们不指定中文搜索的时候补全中文
那么我们搜索 “导”这个字的时候 它的底层会转成 d 从而搜索出一堆无关的东西
例如搜索出了这些 所以我们重新弄索引重新指定我们的搜索的分词器 这样我们就能实现
Suggestion字段的时候
拼音的时候拼音补全
中文的时候中文补全
例如我们搜索dao 搜索 导 搜索 动 ok全部成功了
黑马的课程里面没有给Suggetion字段的补全弄成拼音的时候用拼音搜索补全中文搜索时用中文搜索补全从而造成了自动补全的问题这样子就没有问题了