gpt4 book ai didi

solr - Elasticsearch 部分基于流行度的评分结果

转载 作者:行者123 更新时间:2023-12-02 23:35:48 24 4
gpt4 key购买 nike

我在这个项目中使用 Elasticsearch,但 Solr 解决方案也可能合适。在查询中,我想包含 should 子句的一部分,即使其他条款都无法返回结果,该子句也会返回结果。这将用于文档流行度。我会定期计算阅读流行度,并为每个文档添加一个带有数值的浮点字段。

想法是根据术语返回文档,但当失败时,返回按流行度排名的流行文档。这些应按术语匹配分数或流行度分数的大小排序。

我意识到我可以量化受欢迎程度并将其视为标签“ HitTest 门”、“更热门”、“热门”……但我想使用数字字段,因为排名定义明确。

这是我的数据的当前形式(通过 id 获取):

GET /index/docs/ipad

返回一个示例对象

{
"_index": "index",
"_type": "docs",
"_id": "doc1",
"_version": 1,
"found": true,
"_source": {
"category": ["tablets", "electronics"],
"text": ["buy", "an", "ipad"],
"popularity": 0.95347457,
"id": "doc1"
}
}

当前查询格式

POST /index/docs/_search
{
"size": 10,
"query": {
"bool": {
"should": [
{"terms": {"text": ["ipad"]}}
],
"must": [
{"terms": {"category": ["electronics"]}}
]
}
}
}

这可能看起来是一种奇怪的查询格式,但它们是结构化对象,而不是自由格式文本。

我能否向该查询添加流行度,以便它返回按流行度排名的项目以及那些由 should 术语返回的项目?我会将实际条款提高到受欢迎程度之上,这样他们就会受到青睐。

注意我不想通过受欢迎程度来提升,如果查询的其余部分什么都不返回,我想返回流行。

最佳答案

我能想到的一种方法是包装 match_all filterconstant score并在分数上使用排序,然后是受欢迎程度

例子:

    {
"size": 10,
"query": {
"bool": {
"should": [
{
"terms": {
"text": [
"ipad"
]
}
},
{
"constant_score": {
"filter": {
"match_all": {}
},
"boost": 0
}
}
],
"must": [
{
"terms": {
"category": [
"electronics"
]
}
}
],
"minimum_should_match": 1
}
},
"sort": [
{
"_score": {
"order": "desc"
}
},
{
"popularity": {
"unmapped_type": "double"
}
}
]
}

关于solr - Elasticsearch 部分基于流行度的评分结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31252619/

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