【问题标题】:Issue with ElasticSearch wildcard query and spaces in AWSAWS 中的 ElasticSearch 通配符查询和空格问题
【发布时间】:2016-10-24 23:58:03
【问题描述】:

我们最近为 WooCommerce 集成了 ElasticPress,并对其代码进行了一些改进(通过它的过滤器),但遇到了一些似乎是 ElasticSearch API 限制的地方。我们对搜索订单时发送到弹性搜索引擎的查询进行了修改,以便搜索词作为部分搜索(很像 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),我不确定这是否是问题的原因之一。

谢谢

【问题讨论】:

  • meta._billing_full_name.value的映射是什么。是analyzed string.
  • @Richa 我不确定。我刚刚安装了插件,并使用 ElasticPress 为网站编制了索引。我认为它不会产生任何特殊的东西。我应该如何检查该道具的映射是什么?
  • 使用curl -XGET 'http://serverIp:9200/index_name/_mapping/'
  • 这似乎是映射:https://paste2.org/09sEeE4D(发布外部链接以保持格式)。
  • 这是完整的映射吗?似乎不完整

标签: php wordpress amazon-web-services elasticsearch


【解决方案1】:

根据您显示的映射value 似乎是multifield。这意味着它已被索引为analyzednot_analyzed 字符串。

对于它的not_analyzed 版本,使用以下查询:

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

它现在应该可以工作了。

【讨论】:

  • 感谢@Richa,这不是我使用的实际实现,但它帮助我找到了正确的方向。我使用了sortable 字段而不是raw,因为我想以小写形式进行搜索,根据我在您的帮助下进行的研究,这种分析过的字符串就像未分析过一样。
猜你喜欢
  • 1970-01-01
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-18
相关资源
最近更新 更多