使用 kibana 在 elasticsearch 上搜索两个字段
Search in two fields on elasticsearch with kibana
假设我有一个包含两个字段的索引:title
和 loc
,我想在这两个字段中搜索并获得 "best" 匹配项。所以如果我有三个项目:
{"title": "castle", "loc": "something"},
{"title": "something castle something", "loc": "something,pontivy,something"},
{"title": "something else", "loc": "something"}
...我想得到第二个 title
中有 "castle"
和 loc
中有 "pontivy"
的第二个。 我试着简化了示例和基础,它有点复杂。所以我尝试了这个查询,但它似乎不准确(这是一种感觉,不太好解释):
GET merimee/_search/?
{
"query": {
"multi_match" : {
"query": "castle pontivy",
"fields": [ "title", "loc" ]
}
}
}
在各个字段中搜索并找到与所有字段匹配的方法是否正确?
不确定我的问题是否足够清楚,如果需要我可以编辑。
编辑:
故事是:用户类型 "castle pontivy" 我想得到这个查询的 "best" 结果,这是第二个,因为它在 [=36= 中包含 "castle" ] 和 "pontivy" 在 "loc"。换句话说,我想要在两个领域都有最好结果的结果。
这可以通过使用 bool 类型的查询然后匹配字段来完成。
GET _search
{
"query":
{
"bool": {"must": [{"match": {"title": "castle"}},{"match": {"loc": "pontivy"}}]
}
}
}
正如其他帖子所建议的那样,您可以使用 bool 查询,但这可能不适用于您的用例,因为您只有一个搜索框,您希望使用该搜索框针对多个字段进行查询。
我建议查看简单查询字符串查询,因为它可能会为您提供所需的功能。参见: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 可能不会给您预期的结果。
也值得尝试使用可用于此查询类型的其他选项。您还可以探索使用查询字符串查询,因为它提供了更大的灵活性,但简单查询字符串术语在大多数情况下都非常有效。
假设我有一个包含两个字段的索引:title
和 loc
,我想在这两个字段中搜索并获得 "best" 匹配项。所以如果我有三个项目:
{"title": "castle", "loc": "something"},
{"title": "something castle something", "loc": "something,pontivy,something"},
{"title": "something else", "loc": "something"}
...我想得到第二个 title
中有 "castle"
和 loc
中有 "pontivy"
的第二个。 我试着简化了示例和基础,它有点复杂。所以我尝试了这个查询,但它似乎不准确(这是一种感觉,不太好解释):
GET merimee/_search/?
{
"query": {
"multi_match" : {
"query": "castle pontivy",
"fields": [ "title", "loc" ]
}
}
}
在各个字段中搜索并找到与所有字段匹配的方法是否正确?
不确定我的问题是否足够清楚,如果需要我可以编辑。
编辑:
故事是:用户类型 "castle pontivy" 我想得到这个查询的 "best" 结果,这是第二个,因为它在 [=36= 中包含 "castle" ] 和 "pontivy" 在 "loc"。换句话说,我想要在两个领域都有最好结果的结果。
这可以通过使用 bool 类型的查询然后匹配字段来完成。
GET _search
{
"query":
{
"bool": {"must": [{"match": {"title": "castle"}},{"match": {"loc": "pontivy"}}]
}
}
}
正如其他帖子所建议的那样,您可以使用 bool 查询,但这可能不适用于您的用例,因为您只有一个搜索框,您希望使用该搜索框针对多个字段进行查询。
我建议查看简单查询字符串查询,因为它可能会为您提供所需的功能。参见: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 可能不会给您预期的结果。
也值得尝试使用可用于此查询类型的其他选项。您还可以探索使用查询字符串查询,因为它提供了更大的灵活性,但简单查询字符串术语在大多数情况下都非常有效。