假设我有一个包含两个字段的索引: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" ]
}
}
}
在各个字段中进行搜索并获得与所有字段匹配的正确方法吗?
不确定我的问题是否足够清楚,可以根据需要进行编辑。
编辑:
故事是:用户键入“ castle pontivy”,我想获得此查询的“最佳”结果,这是第二个,因为它在“ title”中包含“ castle”,在“ loc”中包含“ pontivy” 。换句话说,我想要在两个字段中都具有最佳结果的结果。
答案 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']);