首页 文章

Fuzzy包含使用elasticSearch的查询

提问于
浏览
0

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

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

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

  • "William"(将返回所有威廉姆斯)

  • "Willeam"(与1相同)

  • "William Shake"(将仅返回包含"William Shake"的文档

  • "Wiliam sake"(与3相同)

  • "william shakespeare" / "William Shakespeare" / "William shakespeer"(只返回威廉莎士比亚)

我试图使用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
    }
  }
}
  • 它是multi_match因为我搜索了多个字段 .

  • 试图使用分析的字段或not_analyzed字段 .

  • 试图使用"type":"phrase"

  • 弹性版本2.3.1

1 回答

  • 0

    请尝试以下查询 .

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

相关问题