gpt4 book ai didi

node.js - 具有多个过滤器的 Elasticsearch 搜索查询

转载 作者:太空宇宙 更新时间:2023-11-04 00:28:09 24 4
gpt4 key购买 nike

大家好,我是 Elastic Search 的新手,但我已经阅读了基本的 ElasticSearch 5.1 文档。

一行中的问题:

搜索成功,但过滤器无法正常工作。

映射数据类型

{
"properties": {
"title": {"type": "string"},
"description": {"type": "string"},
"slug": {"type": "string"},
"course_type": {"type": "string", "index" : "not_analyzed"},
"price": {"type": "string"},
"categories": {"type": "keyword", "index" : "not_analyzed"},
"tags": {"type" : "keyword"},
// "tags": {"type" : "keyword", "index" : "not_analyzed"},
"status": {"type" : "string","index" : "not_analyzed"},
}
}

正如@Darth_Vader 所指出的,我也尝试过映射。以下是我的映射

索引中的文档 (Req-1)

....
{
"_index": "learnings",
"_type": "materials",
"_id": "582d9xxxxxxxx9b27fab2c",
"_score": 1,
"_source": {
"title": "Mobile Marketing",
"slug": "mobile-marketing",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla eleifend hendrerit vehicula.",
"categories": [
"Digital Marketing"
],
"tags": [
"digital-marketing",
"mobile-marketing"
],
"status": "published"
}
},
...

像上面一样,我的索引中有大约一百个文档

我正在使用的搜索查询已满

"query": {
"bool": {
"must": {
"multi_match" : {
"query" : "mobile",
"fields" : [ "title^5", "tags^4", "categories^3" ],
"operator": "and"
}
},
"filter": {
"bool" : {
"must" : [
{"term" : {"status": "published"} }
]
}
}
}
}
  • 在上面的查询中,最重要的搜索条件/过滤器是{"term":
    {“status”:“已发布”} }
    。每个搜索结果都必须满足这个要求。

  • 现在,我想从结果列表中过滤更多内容。假设我只想获取以 mobile-marketing 作为标签documents。我的文档(Req-1)有这个标签 (移动营销)

现在的问题是:

如果我修改搜索查询并添加所需的过滤器,如下所示:即使我的文档(Req-1)mobile-marketing作为标签

,我也得不到任何搜索结果(点击数 = 0)

"filter": {
"bool" : {
"must" : [
{"term" : {"status": "published"} },
{"term" : {"tags": "mobile-marketing"} }
]
}
}

BUT if I change the filter {"tags": "mobile-marketing"} TO {"tags": "mobile"}, I get the required document (Req-1) as result.

我想使用此过滤器获取相同的文档:{"tags": "mobile-marketing"}。那么我哪里做错了?

What modification does my search query need?

谢谢

最佳答案

您的映射如何查找标签

看来您已经对 tags 字段的映射进行了分析。 *analyzed` 的作用是,来自 books :

First analyze the string and then index it. In other words, index this field as full text.

因此它首先对其进行分析,其中的值看起来像移动营销。因此,由于中间有连字符,它将单独存储移动和营销,并将其标记为代币。即:它将把移动营销存储到两个不同的 token 中。

如果未分析:

Index this field, so it is searchable, but index the value exactly as specified. Do not analyze it.

因此,这基本上会按原样存储值而不对其进行分析,这应该可以满足您的情况。也许你应该看看这个point也是如此。

希望对你有帮助!

关于node.js - 具有多个过滤器的 Elasticsearch 搜索查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41975025/

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