Elasticsearch部分匹配的模糊性

时间:2019-04-09 13:26:01

标签: elasticsearch

给出一个搜索词/字符串,我想用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"

我已经尝试了各种模糊的方法,但是我无法使它起作用。

有人知道我需要如何指定索引和/或查询吗? 提前非常感谢!

0 个答案:

没有答案