好的想法是十分钱一打,真正无价的是能够实现这些想法的人。

ngram分词,and操作搜索不到我理想结果,求大神帮忙看下呢

Elasticsearch | 作者 chenfengchao | 发布于2021年02月18日 | 阅读数:1547

PUT worksheet
{
"settings": {
"analysis": {
"analyzer": {
"myanalyzer": {
"tokenizer": "mytokenizer"
}
},
"tokenizer": {
"mytokenizer": {
"type": "ngram",
"min_gram": 2,
"max_gram": 2,
"token_chars": [
"letter",
"digit",
"whitespace",
"punctuation",
"symbol"
]
}
}
}
},
"mappings":{
"properties":{
"id":{
"type":"long",
"fields":{
"keyword":{
"type":"keyword"
}
}
},
"sheetNo":{"type":"keyword"},
"handleUser": { "type": "keyword"},
"callNo":{
"type": "keyword"},
"createUser":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword"
}
}
},
"createTime": { "type": "long"},
"address":{
"type":"text",
"analyzer": "myanalyzer",
"search_analyzer": "myanalyzer",
"fields":{
"keyword":{
"type":"keyword"
}
}
}
}
}
}


搜索条件是
GET worksheet/_search
{
"query": {
"match": {
"address": {
"query": "成都成华",
"operator": "and"
}
}
}
}
微信截图_20210218132918.png
已邀请:

yongde - 90后IT男

赞同来自: chenfengchao

1、对存入的数据,测试下 myanalyzer 分词器的分词结果
2、myanalyzer 分词器对 “成都成华”的分词结果
3、比较 步骤2的分词是不是在步骤1中都存在

chenfengchao

赞同来自:

第一张是存入es的数据,第二张是我要搜索的,比如"成都成华"的数据

anning19890402

赞同来自:

你的需求应该是搜索出address中既有【成都】又有【成华】的记录吧,我试了下【成都成华】的ik分词结果,分成了【成都   成   华】,这也可能是之前你是用ik分词后仍未生效的原因,你需要在ik的扩展字典里添加关于地区简称的字典,使分词变为【成都  成华】,然后你再使用之前的检索语句就可以了。

YuLiGod - 小于小朋友

赞同来自:

最简单的就是把ngram的粒度分为2-6吧,这样成都成华会被分为一个单独的词,在搜索时侯命中成都成华idf会高一些,所以应该会检索在前列

要回复问题请先登录注册