在elasticsearch中使用3的edge-ngram时如何匹配1-2个字符完全匹配
How to match 1-2 character exact matches while using edge-ngram of 3 in elasticsearch
我正在使用 elasticsearch 查询具有模糊匹配的索引。我正在使用 min_gram 长度为 3 的 edge-ngram 分词器。
但是,这 return 对于只包含 1 或 2 个字符的查询来说没有任何意义。是否可以只匹配这 1 个或 2 个字符的完全匹配项,但使用 edge-ngram 进行具有三个或更多字符的查询?
这是我当前的 elasticsearch 索引映射:
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 的人,第二个请求会 return 一些结果。
我不确定这是否能满足您的所有要求。您可以检查用户输入的长度是否小于 3,然后触发以下查询。
{
"query": {
"match_phrase_prefix": {
"_all": "ti"
}
}
}
我正在使用 elasticsearch 查询具有模糊匹配的索引。我正在使用 min_gram 长度为 3 的 edge-ngram 分词器。
但是,这 return 对于只包含 1 或 2 个字符的查询来说没有任何意义。是否可以只匹配这 1 个或 2 个字符的完全匹配项,但使用 edge-ngram 进行具有三个或更多字符的查询?
这是我当前的 elasticsearch 索引映射:
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 的人,第二个请求会 return 一些结果。
我不确定这是否能满足您的所有要求。您可以检查用户输入的长度是否小于 3,然后触发以下查询。
{
"query": {
"match_phrase_prefix": {
"_all": "ti"
}
}
}