我正在使用elasticsearch 7.7和python elasticsearch\u dsl包版本7.0.0创建一个简单的搜索引擎。我使用的是简单的查询字符串搜索,因为我想启用最常见的搜索功能(布尔运算符、短语搜索),而不必自己解析查询。除了短语匹配功能外,这在很大程度上工作得很好。
我想确保所有结果将包括一个短语匹配,如果一个是在查询中。e、 g.谷歌的工作原理-如果我搜索 "green eggs" and ham
,则不会有不包含“绿蛋”的结果。
假设索引中有3个文档:
{
"question":"I love my phrase",
"background: "dont you"
},
{
"question":"I love my phrase",
"background: "and other terms"
},
{
"question":"I have other terms",
"background: "and more"
}
我现在看到的是:
正如所料,下面的查询只返回前两个文档,其中一个字段中有“myphrase”。
{
'simple_query_string':
{
'query': '"my phrase"',
'fields': ['question', 'background']
}
}
与我期望的相反,下面的查询将返回所有3个结果,第3个结果的得分高于第1个。
{
'simple_query_string':
{
'query': '"my phrase" other terms',
'fields': ['question', 'background']
}
}
如何更改查询,以便搜索“my phrase”other terms时不会返回第3个文档,因为它不包含短语搜索,但第2个文档的得分高于第1个文档,因为它包含短语之外的其他搜索词?
我尝试过但没有成功的事情:
'query': '"my phrase" AND (other terms)' 'query': '"my phrase" AND other terms'
谢谢您
1条答案
按热度按时间92vpleto1#
与我期望的相反,下面的查询将返回所有3个结果
默认情况下,查询中的单词与
OR
操作员:有关详细信息,请参阅说明default_operator
中的参数simple_query_string
文档。您的第二个查询被解释为"my phrase" OR other OR terms
,因此它将返回所有3个结果:每个文档至少包含一个术语"my phrase"
,other
,terms
.如何更改查询,以便搜索“my phrase”other terms时不会返回第3个文档,因为它不包含短语搜索,但第2个文档的得分高于第1个文档,因为它包含短语之外的其他搜索词?
好吧,这是不可能的
simple_query_string
搜索。您可以尝试使用查询字符串搜索,它具有名为布尔运算符的功能。使用该功能,您可以编写提供所需结果的查询: