【问题标题】:wildcard search in elasticsearchelasticsearch中的通配符搜索
【发布时间】:2018-12-06 03:50:51
【问题描述】:

目前我使用以下通配符搜索我的服务,

{
  "query": {
    "bool": {
      "must": [
        {
          "wildcard": {
            "PRODUCT_DESCRIPTION": "\*collaboration\*services\*shiriyara\*"
          }
        }
      ]
    }
  }
}

这会返回我预期的结果。但我正在寻找不使用通配符查询的替代方法来实现这一点,因为通配符需要更多时间。

我在“标准”分析字段上尝试了“query_string”。但是如果整个单词匹配,这将返回结果。

          "query_string": {
            "default_field": "PRODUCT_DESCRIPTION",
            "default_operator": "AND",
            "query": "collaboration services shiriyara"
          }

如果字符串是“collab services shiriyara”,它不会给出任何结果,而通配符给出。

如果有人有想法,请告诉我。索引时间的变化对我来说也很好。

【问题讨论】:

    标签: java elasticsearch lucene


    【解决方案1】:

    您可以按如下方式分解通配符,这适用于您给出的示例:

    GET my_index/_search
    {
      "query": {
        "bool": {
          "must": [
            {"wildcard": {"PRODUCT_DESCRIPTION": "collab*"}},
            {"wildcard": {"PRODUCT_DESCRIPTION": "serv*"}},
            {"wildcard": {"PRODUCT_DESCRIPTION": "shiri*"}}
          ]
        }
      }
    }
    

    或者,您可以考虑在索引时使用ngrams,这将允许匹配单词中的字符序列。

    【讨论】:

    • 我不想使用通配符查询。
    • 我用这个元数据尝试了 ngram ..... "ngram_filter": { "type": "ngram", "min_gram": "3", "max_gram": "10" }.. ...... "ngramAnalyzerKey": { "filter": [ "lowercase" , "ngram_filter" ], "type": "custom", "tokenizer": "keyword" }.....如果有的话匹配查询字符串中的单词匹配...
    【解决方案2】:

    我知道这是一个老问题,但以防万一有人再次遇到它:在 Elasticsearch 7.9 中,引入了一个新的wildcard field type,针对快速查找字符串值中的模式进行了优化。

    【讨论】:

      猜你喜欢
      • 2015-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-17
      • 2017-04-26
      • 2014-06-05
      • 1970-01-01
      • 2018-08-08
      相关资源
      最近更新 更多