lucene ElasticSearch中通配符搜索

4uqofj5v  于 2022-11-07  发布在  Lucene
关注(0)|答案(2)|浏览(261)

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

{
  "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”,它不会给予任何结果,而通配符给出。
如果有人有想法,请告诉我。指数时间的变化对我来说也很好。

ghg1uchk

ghg1uchk1#

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

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

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

voase2hg

voase2hg2#

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

相关问题