代码之家  ›  专栏  ›  技术社区  ›  rap-2-h

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

  •  0
  • rap-2-h  · 技术社区  · 7 年前

    假设我有一个包含两个字段的索引: title loc

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

    "castle" 在它的 标题 "pontivy" 在它的 . 我试着简化这个例子和基础,有点复杂。 所以我尝试了这个查询,但似乎不准确(这是一种感觉,不太容易解释):

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

    在各个领域进行搜索并在所有领域中找到一个匹配的方法是正确的吗?

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

    编辑:

    2 回复  |  直到 7 年前
        1
  •  2
  •   jmlw    7 年前

    我建议您查看一个简单的查询字符串查询,因为它可能会为您提供所需的功能。请参见: 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 here,因为否则它是或,这可能不会给您预期的结果。

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

        2
  •  1
  •   Saram Ali Azhar    7 年前

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

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