ElasticSearch-搜索词中包含的文档

f3temu5u  于 2022-10-06  发布在  ElasticSearch
关注(0)|答案(1)|浏览(201)

我有一个索引如下:

"_source": {
  "iD": "378",
  "containsTerms": [
    {
      "containsTerm": "search term to match"
    },
    {
      "containsTerm": "another search term to match"
    },
    {
      "containsTerm": "etcetera"
    }
  ],
  "startdate": "2022-09-08T14:07:00",
  "enddate": "2022-09-30T14:07:00"
}

其Map为:

"mappings":{
   "properties":{
      "containsTerms":{
         "properties":{
            "containsTerm":{
               "type":"text",
               "fields":{
                  "keyword":{
                     "type":"keyword",
                     "ignore_above":256
                  }
               }
            }
         }
      },
      "enddate":{
         "type":"date"
      },
      "startdate":{
         "type":"date"
      }
   }
}

在索引上运行的以下查询按预期工作:

{
   "query":{
      "bool":{
         "must":[
            {
               "match":{
                  "containsTerms.containsTerm":{
                     "query":"search term to match"
                  }
               }
            },
            {
               "range":{
                  "startdate":{
                     "lte":"2022-09-22T14:43:38"
                  }
               }
            },
            {
               "range":{
                  "enddate":{
                     "gte":"2022-09-22T15:43:38"
                  }
               }
            }
         ]
      }
   }
}

ElasticSearch返回所有部分搜索短语的文档。

  • 搜索
  • 搜索词
  • 搜索词以
  • 要匹配的搜索词

也适用于更大的短语。

  • 搜索术语以匹配诸如此类的话

到目前一切尚好。

但是,要求只在完全匹配的情况下返回文档。将查询更改为使用关键字

{
  "match":{
    "containsTerms.containsTerm.keyword":{
      "query":"search term to match"
    }
  }
}

确保只有搜索要匹配的搜索词才会返回文档。这个很好用。

  • 然而*...要求返回的文档与包含在较大短语中的术语完全匹配。

例如:

“blah blah搜索项匹配blah blah”应该返回文档,而“blah blah搜索项匹配blah blah”不应该返回文档。

这几乎就像是,我们应该返回文档包含在搜索项中的结果,而不是返回包含在文档中的结果。

我甚至不确定这是否可能,或者使用哪种类型的查询。

zyfwsgd6

zyfwsgd61#

您可以使用match_phrase类型的查询,将短语匹配为大文本。
“blah blah搜索项匹配blah blah”应该返回文档,而“blah blah搜索项匹配blah blah”不应该返回文档。

下面的问题将涵盖您的上述用例。

{
  "query": {
    "match_phrase": {
      "containsTerms.containsTerm": "search term to match"
    }
  }
}

我希望当查询匹配到containsTerms对象的至少一个元素时,您希望获得整个文档。

相关问题