elasticsearch 使用kibana在elasticsearch上搜索两个字段,elasticsearch,kibana,elasticsearch,Kibana" /> elasticsearch 使用kibana在elasticsearch上搜索两个字段,elasticsearch,kibana,elasticsearch,Kibana" />

elasticsearch 使用kibana在elasticsearch上搜索两个字段

elasticsearch 使用kibana在elasticsearch上搜索两个字段,elasticsearch,kibana,elasticsearch,Kibana,假设我有一个包含两个字段的索引:title和loc,我想在这两个字段中搜索并获得“最佳”匹配。因此,如果我有三项: {"title": "castle", "loc": "something"}, {"title": "something castle something", "loc": "something,pontivy,something"}, {"title": "something else", "loc": "something"} 。。。我想买第二个,它的标题中有“castle

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

{"title": "castle", "loc": "something"},
{"title": "something castle something", "loc": "something,pontivy,something"},
{"title": "something else", "loc": "something"}
。。。我想买第二个,它的
标题中有
“castle”
,而
“pontivy”
标题中有
“pontivy”
。我试图简化这个例子和基础,它有点复杂。所以我尝试了这个查询,但它似乎不准确(这是一种感觉,不太容易解释):

这是在各个字段中搜索并在所有字段中找到与匹配的字段的正确方法吗

我不确定我的问题是否足够清楚,如果需要,我可以编辑

编辑:


故事是这样的:用户输入“castle pontivy”,我想得到这个查询的“最佳”结果,这是第二个,因为它在“title”中包含“castle”,在“loc”中包含“pontivy”。换句话说,我希望两个字段的结果都最好。

这可以通过使用bool类型的查询,然后匹配字段来实现

  GET _search
  {
   "query": 
    {
     "bool": {"must": [{"match": {"title": "castle"}},{"match": {"loc": "pontivy"}}]
    }
   }
  }

这可以通过使用bool类型的查询,然后匹配字段来实现

  GET _search
  {
   "query": 
    {
     "bool": {"must": [{"match": {"title": "castle"}},{"match": {"loc": "pontivy"}}]
    }
   }
  }

正如另一篇文章所建议的,您可以使用bool查询,但这可能不适用于您的用例,因为您有一个搜索框,您希望使用它查询多个字段

我建议您查看一个简单的查询字符串查询,因为它可能会为您提供所需的功能。见:

所以你可以做类似的事情:

{
  "query": {
    "simple_query_string" : {
        "query": "castle pontivy",
        "fields": ["title", "loc"],
        "default_operator": "and"
    }
  }
}
因此,这将尝试为您提供在这两个字段中匹配这两个术语的最佳文档。默认运算符设置为AND here,因为如果不设置,则为AND,否则可能无法获得预期的结果


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

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

我建议您查看一个简单的查询字符串查询,因为它可能会为您提供所需的功能。见:

所以你可以做类似的事情:

{
  "query": {
    "simple_query_string" : {
        "query": "castle pontivy",
        "fields": ["title", "loc"],
        "default_operator": "and"
    }
  }
}
因此,这将尝试为您提供在这两个字段中匹配这两个术语的最佳文档。默认运算符设置为AND here,因为如果不设置,则为AND,否则可能无法获得预期的结果


对于这种查询类型,还值得尝试其他可用选项。您也可以探索使用查询字符串查询,因为它提供了更多的灵活性,但简单的查询字符串术语在大多数情况下都非常有效。

您可以尝试2个匹配,然后使用逻辑andoperator@Saramali非常感谢。我不太明白,你能把你的评论作为回答吗?你可以尝试2个匹配,然后使用逻辑andoperator@Saramali非常感谢。我不太明白,你能把你的评论作为回答吗?谢谢!这对我的情况不起作用,因为实际的查询是
castle pontivy
,所以我不知道哪个单词必须在哪个字段中。。。对不起,如果不清楚…我不明白。您试图匹配哪些字段以及哪些值。抱歉。故事:用户输入“castle pontivy”,我想得到这个查询的“最佳”结果,这是第二个,因为它在“title”中包含“castle”,在“loc”中包含“pontivy”。换句话说,我想要在两个领域都有最好结果的结果。也许这很愚蠢,我是一个不懂弹性搜索的初学者。这两个字段都可以有2个可能的值,这将包含在最佳结果中?谢谢!这对我的情况不起作用,因为实际的查询是
castle pontivy
,所以我不知道哪个单词必须在哪个字段中。。。对不起,如果不清楚…我不明白。您试图匹配哪些字段以及哪些值。抱歉。故事:用户输入“castle pontivy”,我想得到这个查询的“最佳”结果,这是第二个,因为它在“title”中包含“castle”,在“loc”中包含“pontivy”。换句话说,我想要在两个领域都有最好结果的结果。也许这很愚蠢,我是一个不懂弹性搜索的初学者。两个字段都可以有2个可能的值,这将包含在最佳结果中?