跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • elasticsearch IK 分词怎么无效呀?
未分類
20 5 月 2020

elasticsearch IK 分词怎么无效呀?

elasticsearch IK 分词怎么无效呀?

資深大佬 : dyllen 1

index test的 mapping 定义:

"content": {  "type": "text",  "analyzer": "ik_smart" }, "title": {  "type": "text",  "analyzer": "ik_smart" } 

测试分词:

http://127.0.0.1:9200/_analyze

提交参数:

{     "text": "中国美国英国",     "analyzer": "ik_smart" } 

返回

{     "tokens": [         {             "token": "中国",             "start_offset": 0,             "end_offset": 2,             "type": "CN_WORD",             "position": 0         },         {             "token": "美国",             "start_offset": 2,             "end_offset": 4,             "type": "CN_WORD",             "position": 1         },         {             "token": "英国",             "start_offset": 4,             "end_offset": 6,             "type": "CN_WORD",             "position": 2         }     ] } 

_search 测试一下索引 test

get body

{     "size": 20,     "query": {         "match": {             "content": "广州人"         }     } } 

返回:

{     "took": 0,     "timed_out": false,     "_shards": {         "total": 5,         "successful": 5,         "skipped": 0,         "failed": 0     },     "hits": {         "total": 1,         "max_score": 0.84268904,         "hits": [             {                 "_index": "dcc-speechcrafts",                 "_type": "dcc-speechcraft",                 "_id": "AXIyjmXuVhRXxkRgwNlT",                 "_score": 0.84268904,                 "_source": {                     "title": "",                     "content": "qefdygyrfh 广州人"                 }             }         ]     } } 

第二次_search 测试一下

get body

{     "size": 20,     "query": {         "match": {             "content": "广州"         }     } } 

返回:

{     "took": 1,     "timed_out": false,     "_shards": {         "total": 5,         "successful": 5,         "skipped": 0,         "failed": 0     },     "hits": {         "total": 0,         "max_score": null,         "hits": []     } } 

问题,我那条记录内容包含广州人这三个字,为什么分别用广州人和广州两个词去查询,一次有结果,一次没结果呀?按道理用广州去查询应该也是返回一样的结果的呀,这什么问题?

elasticsearch 5.6.16

大佬有話說 (6)

  • 資深大佬 : fancy967

    没有研究过 ik_smart 这个 analyzer,不过把广州人、qefdygyrfh 广州人和广州这个三个词放进_analyze 测试一下看返回的 token 能不能匹配上吗不就知道原因了吗

  • 資深大佬 : misaka19000

    是不是人匹配了但是广州没匹配

  • 資深大佬 : CoolSpring

    https://github.com/medcl/elasticsearch-analysis-ik
    引用一下
    “ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合,适合 Term Query ;
    ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”,适合 Phrase 查询。”

    这里的问题应该是 ik_smart 在生成索引时只分出了“广州人”一个词,而根据倒排索引的原理用“广州”就搜不到了。
    网络上有一些文章的建议是,索引时用 ik_max_word,搜索时用 ik_smart 。(不过也有其他的坑例如 https://github.com/medcl/elasticsearch-analysis-ik/issues/584 )

  • 主 資深大佬 : dyllen

    @misaka19000 我用_analyze 测试了 ik_smart 分词,广州和广州人不会再分,就一个词

  • 主 資深大佬 : dyllen

    @CoolSpring 听你这样一说,我好像有点明白了,先去试试先。

  • 主 資深大佬 : dyllen

    @fancy967
    @dyllen

    明白了,还是不太了解 elasticsearch 导致的,设置成了索引时用 ik_max_word,搜索时用 ik_smart 。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具