V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Yohann97
V2EX  ›  Java

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

  •  
  •   Yohann97 · 2019-01-02 15:37:46 +08:00 · 2582 次点击
    这是一个创建于 2152 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    3 条回复    2019-01-02 15:55:20 +08:00
    yuikns
        1
    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
        2
    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
        3
    yuikns  
       2019-01-02 15:55:20 +08:00
    https://github.com/medcl/elasticsearch-analysis-ik#changes

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

    再试试自己定义词典,不过若非行业术语,可能就比较 tricky 了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2659 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:40 · PVG 19:40 · LAX 03:40 · JFK 06:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.