elasticsearch - 如何在 Elasticsearch 中找到具有更多匹配查询条件的文档?
问题描述
我正在寻找一种自定义ElasticSearch
评分的方法来检索匹配更多不同查询词的文档。
我的索引映射是:
{
"settings" : {
"number_of_shards" : 1
},
"mappings" : {
"properties": {
"content": {
"type": "text"
},
"display_content": {
"type": "text"
}
}
}
''' 我的搜索查询ElasticSearch
是:
{
'from': offset,
'size': size,
'query': {
'function_score': {
'boost_mode': 'multiply',
'score_mode': 'sum',
'functions': [
],
'query': {
'bool': {
'must': {
'match': {
'content': query
}
},
'filter': [
{
'term': {
'searchable': 'true'
}
}
]
}
}
}
},
'highlight': {
'fields': {
'content': {}
}
},
'track_scores': 'true',
'sort': [
{
'_score': {'order': 'desc'}
}
]
}
例如,我有两个文件。第一份文件:
{
"content": "laptop laptop laptop",
"display_content": ""
}
第二份文件:
{
"content": "laptop mobile",
"display_content": ""
}
我想自定义ElasticSearch
分数以将第二个文档的分数增加到像mobile laptop
. 我怎么能做这个?
解决方案
你不需要一个function_score
. 这是match
查询的默认行为。
但是,我了解您希望减少分数中重复术语的影响。
如果您想完全丢弃重复的术语,您可以使用unique
令牌过滤器。然后该字段"laptop laptop laptop"
将被索引为"laptop"
完全消除重复术语的影响。
如果您仍然想保留重复的术语,您可以使用k1
BM25 相似度函数(默认相似度函数)的参数来改变它们的影响。
请参阅文档以配置索引的相似度函数。请注意,无需重新索引即可更改相似度,您只需关闭并重新打开索引即可。
请注意,更改相似函数参数的值被视为专家特征。您可以在本文中阅读有关此主题的更多信息
推荐阅读
- keras - Keras custom loss as a function of multiple outputs
- node.js - Chakram test not working
- cuda - 不推荐使用 nvcc 动态异常规范
- android - Firebase 慢速图像读取
- android - RTL反应原生抽屉问题android
- android - Android Studio:尝试第二次启动应用程序时失败
- vim - gVim 转义键在 Windows 10 上不起作用
- c# - 为 RestSharp oauth1.0 C# 生成 hmacsha1 签名(无令牌)
- c++14 - program that converts spelled out numbers in to its digit form. (c++)
- php - 找不到类“LaravelLocalization”