我使用ElasticSearch 6.6。我的应用程序通过从不同数据源提取数据来构建ES索引。搜索未指定数据源。它只是建立一个类似的查询:
GET employerdata/_search
{
"query":
{
"bool": {
"must": [
{ "match" : {"name" : {
"query": "WALMART",
"fuzziness": "3"
}}},
{ "match" : {"state" : "TX"}}
]
}
}
}
有一个名为“ dataSource”的字段。但是,它不用于构建查询。但是,这是结果的一部分。基本上,我想在构建查询时隐式地使用此字段。例如,如果文档的“ dataSource”等于“ A”,则文档应位于结果集的顶部。换句话说,我想基于“ dataSource”字段来提高得分。但是,即使文档是其他“数据源”(例如“ B”)的索引,我仍然希望得到结果。
答案 0 :(得分:1)
要添加到@ apt-get_install_skill答案的顶部。如果在查询时需要提升而不是建立索引。您可以使用function_score
GET employer/_search
{
"query": {
"function_score": {
"query": {
"match_all": {}
},
"functions": [
{
"filter": {
"match": {
"dataSource": "B"
}
},
"weight": 2
}
]
}
}
}
答案 1 :(得分:0)
看看可以添加到查询(https://www.elastic.co/guide/en/elasticsearch/reference/6.6/mapping-boost.html)中的加速参数。您将此提升设置为字段的某些值(例如dataSource = A)。这不是一个筛选器(dataSource = B仍将返回),但是它增加了与查询匹配的特定文档的相关性。
答案 2 :(得分:0)
GET employerdata/_search
{
"query":
{
"function_score": {
"query": {"bool": {
"must": [
{ "match" : {"beName" : {
"query": "KROGER",
"fuzziness": "3"
}}},
{ "match" : {"beZip" : "47119"}}
]
} },
"functions": [
{ "filter": {"match": {"dataSource" : "eeo1"}},
"random_score": { },
"weight": 25
}
]
}
}
}