elasticsearch simplestringquery中需要短语匹配

wwwo4jvm  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(407)

我正在使用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' 谢谢您

92vpleto

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 搜索。您可以尝试使用查询字符串搜索,它具有名为布尔运算符的功能。使用该功能,您可以编写提供所需结果的查询:

{
  "query": {
    "query_string": {
      "query": "+\"my phrase\" other terms",
      "fields": ["question", "background"]
    }
  }
}

相关问题