首页 > 解决方案 > elasticsearch中的通配符搜索

问题描述

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

{
  "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”,它不会给出任何结果,而通配符给出。

让我知道,如果有人有想法。索引时间的变化对我来说也很好。

标签: javaelasticsearchlucene

解决方案


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

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

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


推荐阅读