需要在ElasticSearch中找到一种方法,以基于某个字段的特定值来提高文档的相关性。具体地说,在我的所有文档中都有一个特殊的字段,该字段值越高,包含该字段的文档就越相关,无论搜索如何。
考虑以下文档结构:
{
"_all" : {"enabled" : "true"},
"properties" : {
"_id": {"type" : "string", "store" : "yes", "index" : "not_analyzed"},
"first_name": {"type" : "string", "store" : "yes", "index" : "yes"},
"last_name": {"type" : "string", "store" : "yes", "index" : "yes"},
"boosting_field": {"type" : "integer", "store" : "yes", "index" : "yes"}
}
}
我希望具有较高boosting_field值的文档在本质上比具有较低boosting_field值的文档更相关。这只是一个起点--在确定搜索中每个文档的最终相关性得分时,还将考虑查询与其他字段之间的匹配。但是,在其他条件相同的情况下,增强场越高,文档越相关。
有人知道怎么做吗?
多谢!
您可以在html" target="_blank">索引时或查询时进行boost。我通常更喜欢查询时间提升,尽管它会使查询稍微慢一点,否则每次我想改变提升因子时都需要重新索引,这通常需要微调,并且需要非常灵活。
使用elasticsearch查询DSL应用查询时间提升有不同的方法:
如果要对匹配特定查询或筛选器的文档进行特定的增强,则前三个查询非常有用。例如,如果您只想增强上个月发布的文档。您可以在boosting_field中使用这种方法,但您需要手动定义一些boosting_field间隔,并为它们提供不同的boosting_field间隔,这并不是很好。
最好的解决方案是使用自定义分数查询,它允许您使用脚本进行查询并自定义其分数。它是相当强大的,与脚本您可以直接修改分数本身。首先,我将boosting_field值缩放为0到1的值,例如,这样您的最终得分就不会变成一个大数字。为了做到这一点,您需要预测字段可以包含的最小值和最大值。例如,我们假设最小值为0,最大值为100000。如果将boosting_field值缩放为0到1之间的数字,则可以将结果与实际得分相加,如下所示:
{
"query" : {
"custom_score" : {
"query" : {
"match_all" : {}
},
"script" : "_score + (1 * doc.boosting_field.doubleValue / 100000)"
}
}
}
您还可以考虑使用boosting_field作为boost因子(_score*
而不是_score+
),但是您需要将其缩放到最小值为1的间隔(只需添加+1)。
你甚至可以调整结果,以改变它的重要性,增加一个权重的值,你用它来影响分数。如果你需要把多个促进因素结合在一起,以便给它们不同的权重,你会更需要这个。
问题内容: 需要在ElasticSearch中找到一种方法来根据字段的特定值来提高文档的相关性。具体来说,我所有文档中都有一个特殊字段,该字段值越高,包含该文档的文档就越相关,而与搜索无关。 考虑以下文档结构: 我希望boosting_field值较高的文档与那些boosting_field值较低的文档 本质上相关性 更高。这只是一个起点- 在确定搜索中每个文档的最终相关性分数时,还将考虑查询与其
我有一个弹性搜索映射,包含一个语言代码的字段,如EN、DE、ES、FR等。如果用户开始用英语搜索,我想在搜索结果中增加所有英语文档;法语、西班牙语、德语等也一样。 我想,应该这样做: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#function
作为参考,我使用的是Elasticsearch 6.4.0 我有一个Elasticsearch查询,它返回一定的命中视频数,我正在尝试删除文本字段值过于相似的命中。我的查询是: 此查询使用自定义函数分数和筛选器来返回用户可能喜欢的书籍(他们尚未创作的书籍)。对于某些人来说,它返回的名字非常相似的书(即乔治·华盛顿的一生,乔治·华盛顿的美好时光,谁是乔治·华盛顿),我希望热门歌曲有一套更多样化的名字
问题内容: 我有一个MySQL表和模型包含的字段,以及。我也有另一个表/模型也包含,和。 假设已经充满了桌子,和。 当我以表格形式输入数据时,当我选择与表格相关的“ 通过”下拉字段时,我希望相关和字段能够自动填写。 我的for 看起来像这样: 根据建议,在控制器中添加了以下内容: 问题答案: 您所需要的只是调用请求以获取必填字段。就像下面这样: (我不知道您的型号名称)查看您的表格,看看您的字段是
我已经设置了4个阶段多个相关的下拉字段。我想选择地区,然后是国家,拥有或特许经营,最后是商店名称。 我的问题:1)显示/隐藏工作正常,但在选择“-”时不会重置值。这意味着我可以选择一个商店,然后改变我的观点,从上面的字段类别中选择另一个选项,然后选择第二个商店。该帖子将同时具有这两个值。我想在选择其他选项时重置第一个值 2)店名具有所有名称属性store_name。当我使用implode()时,我
我有以下查询 http://172.22.23.169:9200/index1,index2,index3/_search?pretty 使用这个URL,我想查询Elasticsearch中的许多索引,并且只返回那些存在特定字段的文档。 是否可以在“exists”子句中放入一个字段列表,我在其中定义“field1”、“field2”或“fiedl3”是否存在于某个文档中,否则返回它,或者我必须编写