我们最近为 WooCommerce 集成了 ElasticPress,并对其代码进行了一些改进(通过其过滤器),但遇到了一些似乎是 ElasticSearch API 的限制的问题。我们对搜索订单时发送到 Elasticsearch 引擎的查询进行了修改,以便搜索词作为部分搜索(很像 SQL 中的 LIKE 语句)。
它工作正常,除非查询中存在特殊符号,例如空格或@符号。我读过可以通过转义特殊字符来避免这种情况,但我也没有这样做。
我正在使用通配符查询,并且我尝试用转义版本替换空格,甚至使用 ?标记(应匹配任何单个字符)。但也没有运气。
此查询有效:
"query": {
"wildcard": {
"meta._billing_full_name.value": "*manish*"
}
}
这也是
"query": {
"wildcard": {
"meta._billing_full_name.value": "*kumar*"
}
}
这不会:
"query": {
"wildcard": {
"meta._billing_full_name.value": "*manish k*"
}
}
顺便说一下,我们使用 AWS ElasticSearch Service 作为服务提供商。他们使用的是严重过时的 ElasticSearch 版本(据我所知是 1.5.3),我不确定这是否是问题的原因之一。
谢谢
最佳答案
根据您显示的映射值
似乎是multifield 。这意味着它已被索引为 analyzed
和 not_analyzed
字符串。
对于其 not_analyzed
版本,请使用以下查询:
"query": {
"wildcard": {
"meta._billing_full_name.value.raw": "*manish k*"
}
}
现在应该可以工作了。
关于php - AWS 中的 ElasticSearch 通配符查询和空格问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37978250/