gpt4 book ai didi

带短语的 ElasticSearch Bool 过滤器(而不是单个单词/标签)

转载 作者:行者123 更新时间:2023-11-29 02:48:05 24 4
gpt4 key购买 nike

在 Elasticsearch 中,这个过滤器

{
"bool": {
"must": {
"term": {
"article.title": "google"
}
}
}
}

正确返回标题中带有“google”的文章。

但是,

{
"bool": {
"must": {
"term": {
"article.title": "google earth"
}
}
}
}

不返回任何结果,尽管标题中有确切单词“google earth”的文章。我希望它这样做。

完整查询:

{
"size": 200,
"filter": {
"bool": {
"must": {
"term": {
"article.title": "google maps"
}
}
}
},
{
"range": {
"created_date": {
"from": "2013-01-11T02:14:03.352Z"
}
}
}]
}
}

如您所见,我没有“查询”——只有过滤器、大小和范围。所以我认为 ElasticSearch 使用的是默认分析器...?

我误会了什么?


编辑:对于那些寻找解决方案的人,这是我的过滤器:

{
"query": {
"bool": {
"must": {
"must_match": {
"article.title": "google earth"
}
}
}
}
}

注意 (1) 我们用“query”包裹了 bool 过滤器,(2) “term”变成了“must_match”,这导致整个短语被匹配(而不是“match”,它会搜索article.title 与谷歌地球上的标准分析器)。

完整的查询如下所示:

{
"size": 200,
"filter": {
"query": {
"bool": {
"must": {
"must_match": {
"article.title": "google earth"
}
}
}
}
}
}

FWIW,我在“过滤器”字段中有此条件的原因(与使用标准查询相反)是有时我想使用“must_not”而不是“must_not”,有时我还添加其他查询的元素。

最佳答案

Elasticsearch 根本没有使用分析器,因为您使用了 term query ,它会查找确切的术语。

您的 title 字段已被分析(除非您另有说明),因此 "google earth" 将被索引为两个术语 ["google"“地球”]。这就是为什么 term 查询 "google" 有效,但 term 查询 "google earth" 无效的原因t - 该确切术语不存在。

如果您使用 match query相反,您的查询字词将在搜索之前进行分析。

关于带短语的 ElasticSearch Bool 过滤器(而不是单个单词/标签),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14792942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com