我使用elasticsearch来查询具有模糊匹配的索引。我使用的是一个edge-ngram tokenizer,其min_gram长度为3。
但是,对于仅包含1或2个字符的查询,这不会返回任何内容。是否可以匹配那些1或2个字符的完全匹配,但是使用edge-ngram进行三个或更多字符的查询?
这是我目前的弹性搜索索引映射:
curl -XPUT 'http://localhost:9200/person' -d '{
"settings": {
"number_of_shards": 1,
"analysis": {
"filter": {
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": 3,
"max_gram": 20
}
},
"analyzer": {
"default": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"autocomplete_filter"
]
}
}
}
}
}'
要查询此索引,请执行以下请求:
curl -XPOST 'localhost:9200/person/type/_search' -d '{
"query": {
"match": {
"_all": "Tim”
}
}
}'
产生大量结果,但请求如
curl -XPOST 'localhost:9200/person/type/_search' -d '{
"query": {
"match": {
"_all": "Ti”
}
}
}'
给出一个空集。理想情况下,如果名为Tim的索引中有人,则第二个请求将返回一些结果。
答案 0 :(得分:2)
我不确定这是否满足您的所有要求。您可以检查用户输入的长度是否小于3,然后触发以下查询。
{
"query": {
"match_phrase_prefix": {
"_all": "ti"
}
}
}