【问题标题】:ElasticSearch: Match Field Within QueryElasticSearch:查询中的匹配字段
【发布时间】:2014-08-23 02:12:56
【问题描述】:

使用match 在索引文档中搜索字符串很简单。相反的呢?我需要在查询中查找字符串字段的匹配项。例如,搜索:

correct horse battery staple

应该匹配一个字段值为horse battery的文档,仅此而已。使用 ElasticSearch 的查询是什么?

编辑:这是一个关于有人想做同样事情但从未收到任何回复的帖子:https://groups.google.com/d/topic/elasticsearch/IYDu5-0YD6E/discussion

【问题讨论】:

  • 我不确定您的示例:您是否尝试搜索字段名称而不是其中包含的值?
  • @Tom83 不,我正在尝试匹配该字段的值。但我想在查询字符串中查找字段的值,而不是在字段值中查找查询字符串。

标签: search elasticsearch


【解决方案1】:

倒排索引在了解文档准确包含哪些多个术语方面表现不佳。在definitive guide 中找到的一个解决方案是对术语计数进行索引并查询不同的可能组合,这非常繁琐。

这里有一个related question(关于过滤器,但问题是一样的),答案更完善。

【讨论】:

  • 谢谢,我想这是不可能的。我能够通过渗滤器获得有效的解决方案。
【解决方案2】:

我想到的解决方案是使用 porcolator API。我将字段值索引为搜索查询,然后将其与包含查询字符串的文档进行匹配。这种方法效果很好。以下是我创建过滤器的方法:

curl -XPUT localhost:9200/myindex/.percolator/model-2332 -d '
{
    "query": {
        "match_phrase": {
            "name": "horse battery"
        }
    }
}'

以及我如何查询它:

curl -XGET localhost:9200/myindex/model/_percolate -d '
{
    "doc": {
        "name": "correct horse battery staple"
    }
}'

【讨论】:

  • 很好:不要犹豫,更新你的答案一些代码来说明这一点,它可能对某人有用。
  • @Tom83 好主意,已添加。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
  • 2017-12-03
  • 1970-01-01
相关资源
最近更新 更多