给出一个搜索词/字符串,我想用Elasticsearch查询两个字段,同时考虑一定程度的模糊性。
我有一个字段“ firstname”和“ lastname”(并且冗余地也合并到另一个字段“ fullname”):
{
"settings": {
"analysis": {
"filter": {
"nGram_filter": {
"type": "nGram",
"min_gram": 3,
"max_gram": 20,
"token_chars": [ "letter", "digit", "punctuation", "symbol" ]
}
},
"analyzer": {
"nGram_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [ "lowercase", "asciifolding", "nGram_filter" ]
},
"whitespace_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [ "lowercase", "asciifolding" ]
}
}
}
},
"mappings": {
"_doc": {
"properties": {
"lastname": {
"type": "keyword"
"fields": {
"partial": {
"type": "text",
"analyzer": "nGram_analyzer",
"search_analyzer": "whitespace_analyzer"
}
}
},
"firstname": {
"type": "keyword"
"fields": {
"partial": {
"type": "text",
"analyzer": "nGram_analyzer",
"search_analyzer": "whitespace_analyzer"
}
}
},
"fullname": {
"type": "text",
"analyzer": "nGram_analyzer",
"search_analyzer": "whitespace_analyzer"
}
...
我想用字符串查询这两个字段,同时要求最大偏差。所以例如对于firstname =“ John”和lastname =“ Test”,以下查询应返回条目:
"John Test"
"John Tes"
"John Testx"
"Joh Test"
"Johx Test"
其他带有更多“偏差”的查询字符串不应返回结果:
"John Texx"
"John T"
"John"
"Test"
我已经尝试了各种模糊的方法,但是我无法使它起作用。
有人知道我需要如何指定索引和/或查询吗? 提前非常感谢!