我使用elasticsearch ngram
"analysis": {
"filter": {
"desc_ngram": {
"type": "ngram",
"min_gram": 3,
"max_gram": 8
}
},
"analyzer": {
"index_ngram": {
"type": "custom",
"tokenizer": "keyword",
"filter": [ "desc_ngram", "lowercase" ]
},
"search_ngram": {
"type": "custom",
"tokenizer": "keyword",
"filter": "lowercase"
}
}
}
我这里有两个对象
{
"name": "Shana Calandra",
"username": "shacalandra",
},
{
"name": "Shana Launer",
"username": "shalauner",
},
并使用此查询
{
query: {
match: {
_all: "Shana"
}
}
}
当我使用此查询进行搜索时,它会返回两个文档,但我无法在此处搜索部分字词,例如我无法使用" Shan"而不是" Shana"在查询中,因为它不会返回任何内容。
也许我的映射是错误的,我无法理解问题是关于映射还是查询
答案 0 :(得分:0)
如果指定
"mappings": {
"test": {
"_all": {
"index_analyzer": "index_ngram",
"search_analyzer": "search_ngram"
},
对于_all
字段的映射,它将起作用。 _all
有自己的分析器,我怀疑您仅使用分析器name
和username
而不是_all
。