【问题标题】:Fuzzy contains query with elasticSearch模糊包含使用 elasticSearch 的查询
【发布时间】:2017-03-24 13:49:44
【问题描述】:

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

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

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

  1. “威廉”(将返回所有威廉)
  2. “威廉”(同 1)
  3. “William Shake”(将仅返回包含“William Shake”的文档
  4. “威廉清酒”(同3)
  5. “威廉莎士比亚”/“威廉莎士比亚”/“威廉莎士比亚”(将只返回威廉莎士比亚

我尝试使用 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 因为我搜索多个字段。
  • 尝试使用已分析字段或未分析字段。
  • 尝试使用“type”:“phrase”
  • 弹性版本 2.3.1

【问题讨论】:

    标签: elasticsearch fuzzy-search n-gram elasticsearch-2.0 nosql


    【解决方案1】:

    试试下面的查询。

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

    【讨论】:

      猜你喜欢
      • 2021-07-01
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      相关资源
      最近更新 更多