ik 搜索展示排序问题(springdata elasticsearch)

2019-01-02 15:37:46 +08:00
 Yohann97

逻辑如图 https://i.loli.net/2019/01/02/5c2c689c3723c.png

不知道怎么下手,全匹配加了在关键词前后加了冒号,代码如下 builder.must(QueryBuilders.queryStringQuery("""+title+""").analyzer("ik").defaultField("title"))

但是搜索“三峡航运”或者“三峡”,“航运” 却搜索不出来“三峡航运数据中心平台建设项目”,如果搜索“三峡”,“中心”可以,“三峡”,“航”可以,搞不懂是为什么,求大佬们指点

2411 次点击
所在节点    Java
3 条回复
yuikns
2019-01-02 15:51:19 +08:00
1. 现在还有 ik? https://github.com/medcl/elasticsearch-analysis-ik

> Analyzer: ik_smart , ik_max_word , Tokenizer: ik_smart , ik_max_word

2. 我觉得不需要 analyzer("ik") 这个。在 mapping 中定义好 tokenizer & analyzer 比如 ik_max_word,query 直接查询即可。你是不是 mapping 里面和 es 里面不匹配啊

最后 build 的 query post 个 json 自己看看?
twocold0451
2019-01-02 15:55:04 +08:00
近期再做 solr 搜索的项目用到 ik 分词器,不知道一下见解能否帮到你。。

title 字段用到了 ik 分词,你要去看他将“三峡航运数据中心平台建设项目” 分成哪些词。我用我的系统看了下,下图。

https://imgur.com/a/KohEnii

分词结果中并没有“三峡航运”这个词,这个词不会被索引进库,所以用“三峡航运”搜不到结果。如果想用“三峡航运”搜到结果,我这有 2 个解决办法。
1.将“三峡航运”添加到词库,具体方法网上找找,不太清楚 elasticsearch 要怎么做。
2.建立一个不分词,内容和 title 一样的字段,查询的时候同时查这 2 个字段,不分词的这个字段全词匹配。

刚接触这块,有错误请指出。
yuikns
2019-01-02 15:55:20 +08:00
https://github.com/medcl/elasticsearch-analysis-ik#changes

哦,题目中说的这种情况下应该是试试用下 ik_smart。

再试试自己定义词典,不过若非行业术语,可能就比较 tricky 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/523134

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX