模糊包含带有 elasticSearch 的查询

Fuzzy contains query with elasticSearch

如何执行模糊查询并包含字符串? 假设我有以下文件:

{ ... "name":"william shakespeare" ... }

我想收到以下查询的文档:

  1. "William"(将 return 所有威廉姆斯)
  2. "Willeam"(与 1 相同)
  3. "William Shake"(将 return 仅包含 "William Shake"
  4. 的文档
  5. "Wiliam sake"(与 3 相同)
  6. "william shakespeare" / "William Shakespeare" / "William shakespeer" (将 return 只有威廉·莎士比亚

我尝试使用 ngram 分析器和模糊查询但没有成功。

{
  "settings": {
    "analysis": {
      "filter": {
        "ngram_analyzer_filter": {
          "type": "ngram",
          "min_gram": 2,
          "max_gram": 15
        }
      },
      "analyzer": {
        "ngram_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "ngram_analyzer_filter"
          ]
        }
      }
    }
  },
  "mappings": {
    "my_type": {
      "properties": {
        "name": {
          "type": "string",
          "analyzer": "ngram_analyzer",
          "search_analyzer": "standard",
          "fields": {
            "raw": {
              "type": "string",
              "index": "not_analyzed"
            }
          }
        }
      }
    }
  }
}

我的查询:

{
  "query": {
    "multi_match": {
      "query": "william shake",
      "fields": [
        "name.raw"
      ],
      "fuzziness": 2,
      "minimum_should_match":2
    }
  }
}

试试下面的查询。

{
  'query': {
    'multi_match': {
      'fields':  [ 
          "name.raw" 
        ],
        'query': $scope.search.queryTerm,
        'fuzziness': 2,
        'prefix_length': 1
    }
  }
}