php - AWS 中的 ElasticSearch 通配符查询和空格问题

标签 php wordpress amazon-web-services elasticsearch

我们最近为 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 。这意味着它已被索引为 analyzednot_analyzed 字符串。

对于其 not_analyzed 版本,请使用以下查询:

"query": {
"wildcard": {
    "meta._billing_full_name.value.raw": "*manish k*"
  }
}

现在应该可以工作了。

关于php - AWS 中的 ElasticSearch 通配符查询和空格问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37978250/

相关文章:

java - 数组中元素的梯度分布

php - JQUERY:我如何知道该元素当前是否打开/关闭(slidetoggle)

html - 如何找出谁在托管我的 Wordpress 网站?

css - 如何在 Wordpress 中将缩略图包裹在文本中?

amazon-web-services - 创建策略时出现错误 : "Has prohibited field Principal",

amazon-web-services - AWS是否支持加权负载平衡?

php - 导致MySQL失败的特殊字符

php - GET 命令给出两种输出,为什么?

python - 使用 python-wordpress-xmlrpc 发布时无法设置页面模板

amazon-web-services - 如何在不使用.pem文件的情况下SSH到EC2