使用kibana在elasticsearch的两个字段中搜索

时间:2018-09-12 11:30:34

标签: elasticsearch kibana

假设我有一个包含两个字段的索引:titleloc,我想在这两个字段中进行搜索并获得“最佳”匹配。因此,如果我有三个项目:

{"title": "castle", "loc": "something"},
{"title": "something castle something", "loc": "something,pontivy,something"},
{"title": "something else", "loc": "something"}

...我想得到第二个在"castle"中有title"pontivy"中有loc的人。 我试图简化示例和基础,但要复杂一些。因此,我尝试了该查询,但是它看起来不准确(感觉很不容易解释):

GET merimee/_search/?
{
  "query": {
    "multi_match" : {
      "query":    "castle pontivy", 
      "fields": [ "title", "loc" ] 
    }
  }
}

在各个字段中进行搜索并获得与所有字段匹配的正确方法吗?

不确定我的问题是否足够清楚,可以根据需要进行编辑。

编辑:

故事是:用户键入“ castle pontivy”,我想获得此查询的“最佳”结果,这是第二个,因为它在“ title”中包含“ castle”,在“ loc”中包含“ pontivy” 。换句话说,我想要在两个字段中都具有最佳结果的结果。

2 个答案:

答案 0 :(得分:2)

正如另一篇文章所建议的那样,您可以使用布尔查询,但由于您有一个要使用多个字段进行查询的搜索框,因此可能不适用于您的用例。

我建议查看简单查询字符串查询,因为这可能会为您提供所需的功能。参见:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-simple-query-string-query.html

因此,您可以执行以下操作:

{
  "query": {
    "simple_query_string" : {
        "query": "castle pontivy",
        "fields": ["title", "loc"],
        "default_operator": "and"
    }
  }
}

因此,这将尝试为您提供与这两个字段中的两个术语均匹配的最佳文档。默认运算符在此处设置为AND,因为否则为OR,可能不会为您提供预期的结果。

值得尝试的还有与此查询类型可用的其他选项。您还可以探索使用查询字符串查询,因为它提供了更大的灵活性,但“简单查询字符串”一词在大多数情况下都非常有效。

答案 1 :(得分:1)

这可以通过使用布尔类型的查询,然后匹配字段来完成。

window.location = jasmine.createSpyObj('location', ['href']);