【问题标题】:Elastic search wildcard search space issue弹性搜索通配符搜索空间问题
【发布时间】:2021-08-16 03:14:09
【问题描述】:

考虑索引字段“ProductName”的值为“dove 3.75oz”,当用户搜索“dove 3.75oz”时,bool 查询下方的文本可以正常检索文件:

{"bool":{"must":[{"wildcard":{"ProductName":{"value":"dove"}}},{"wildcard":{" ProductName":{"value":"3.75oz"}}}]}}

如果用户搜索“dove 3.75 oz”(“3.75”和“oz”之间的空格),则布尔查询无法检索到相同的文档:

{"bool":{"must":[{"wildcard":{"ProductName":{"value":"dove"}}},{"wildcard":{" ProductName":{"value":"3.75 oz"}}}]}}

问题:如何使用支持空格或不支持空格的通配符查询来设计查询?请分享一个例子。

【问题讨论】:

  • 什么是 ProductName 字段类型?
  • @TusharShahi ProductName 字段类型为字符串

标签: elasticsearch elastic-stack


【解决方案1】:

默认情况下,文本字段值被分解为标记,然后存储。所以像 "hello man"" 之类的东西将分别保存为 helloma​​n 因为它们之间的空间。这就是为什么不适用于通配符查询。

{"wildcard":{"ProductName":{"value":"3.75 oz"}}}

它仅适用于单个令牌。对于通配符查询,您可以使用称为 wildcard 的特殊字段类型。

如果您不想重新索引数据,请尝试以下短语搜索:

"match_phrase": {
      "ProductName": {
        "query": "3.75 oz"
      }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    相关资源
    最近更新 更多