我们最近将Elasticpress集成了WooCommerce,并对其代码进行了一些改进(通过其过滤器),但击中了一些似乎是Elasticsearch API的局限性。我们已经对搜索订单时发送到弹性搜索引擎的查询进行了mod,以便搜索词可以作为部分搜索(非常类似于SQL中的类似语句)。
它可以正常工作,除非查询中有特殊符号,例如空间或 @符号。我读到可以通过逃脱特殊角色来避免这种情况,但是我也没有运气。
我正在使用通配符查询,我尝试使用其逃脱版本,甚至是?令牌(应与任何单个字符匹配)。而且也没有运气。
此查询有效:
"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服务作为服务提供商。他们使用的是Elasticsearch的严重过时版本(据我所知,1.5.3),我不确定这是否可能是问题的原因。
谢谢
根据您所示的映射value
,似乎是多场。这意味着它已被索引为analyzed
和not_analyzed
字符串。
对于not_analyzed
IT版本,请使用以下查询:
"query": {
"wildcard": {
"meta._billing_full_name.value.raw": "*manish k*"
}
}
现在应该起作用。