我刚打酱油去了,不好意思

ngram分词后查不到预期的结果

Elasticsearch | 作者 ridethewind | 发布于2019年03月19日 | 阅读数:6455

settings配置如下:
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "ngram",
"min_gram": 1,
"max_gram": 5,
"token_chars": [
"letter",
"digit",
"punctuation",
"symbol"
]
}
}
},
"number_of_shards":10,
"number_of_replicas":1
},
"mappings": {
"ngram5": {
"properties": {
"DOC": {
"type": "text",
"analyzer": "my_analyzer",
"search_analyzer": "my_analyzer"
}
}
}
}
}
插入如下的测试数据
"DOC":"张三李四王五 191729209354180215188140386256  "
数据中包含
191729209354180215188140386256,使用如下语句查询
191729209354180215188140386256可以查到上述的记录,但是使用
19172920935418021518814038625查不到
{
"query": {
"constant_score" :{
"filter" : {
"match_phrase" : {
"DOC" :{
"query": "191729209354180215188140386256"
}
}
}
}
}
}
已邀请:

bellengao - 博客: https://www.jianshu.com/u/e0088e3e2127

赞同来自:

查不到是因为match_phrase要求查询词term的位置必须和原文档中的保持一致,假设"min_gram": 1, "max_gram": 3, 词“12”分词后的结果为[1, 12, 2], 词“123”分词后的结果为[1, 12, 123, 2, 23, 3],  此时使用词“12”要去查询原文档中的“123”是匹配不到的,因为两者分词后第三项不同。可以使用_analyzer结果查看分词结果

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自:

1、 "min_gram": 1,
          "max_gram": 100, 改大一些
2、用term检索,举例:
GET ngram_index/_search
{
"query": {
"term": {
"DOC": {
"value": "19172920935418021518814038"
}
}
}
}
能解决你的问题

要回复问题请先登录注册