假设我有一个包含两个字段的索引:title
和loc
,我想在这两个字段中进行搜索并获得“最佳”匹配。因此,如果我有三个项目:
{"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" ]
}
}
}
在各个 Realm 进行搜索并获得与所有 Realm 相匹配的一种方法是否正确?
不确定我的问题是否足够清楚,可以根据需要进行编辑。
编辑:
故事是:用户键入“caSTLe pontivy”,我想获得此查询的“最佳”结果,这是第二个,因为它在“title”中包含“caSTLe”,在“loc”中包含“pontivy”。换句话说,我想要在两个字段中都具有最佳结果的结果。
最佳答案
就像其他发布的建议一样,您可以使用 bool(boolean) 查询,但是对于您的用例来说可能不起作用,因为您有一个要与多个字段一起查询的搜索框。
我建议您查看一个简单查询字符串查询,因为它可能会为您提供所需的功能。另请: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,可能不会为您提供预期的结果。
值得尝试使用此查询类型的其他选项。您还可以探索使用查询字符串查询,因为它可以提供更大的灵活性,但是“简单查询字符串”一词在大多数情况下都可以很好地工作。
关于elasticsearch - 使用kibana在elasticsearch的两个字段中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52294109/