我正在尝试为弹性搜索(Elastic.co)实施相关性反馈。
我知道boosting queries,它允许指定正面和负面术语,其想法是对负面术语进行折扣,而不排除它们,就像在布尔值must_not中那样。< / p>
但是,我正在努力实现正面和负面的 分层提升。
也就是说,我想获取分级正面和负面术语列表并生成一个查询,以便有不同的正面和负面增强层,每个层包含自己的查询术语。
类似(伪查询):
query{
{
terms: [very relevant terms]
pos_boost: 3
}
{
terms: [relevant terms]
pos_boost: 2
}
{
terms: [irrelevant terms]
neg_boost: 0.6
}
{
terms: [very irrelevant terms]
neg_boost: 0.3
}
}
我的问题是,使用嵌套的提升查询是否可以实现这一目标,或者如果我使用多个应该子句,我的情况会更好。
我担心的是,我不确定bool查询的should子句中0.2的提升是否仍会使文档得分正增加,因为我想折扣文件,而不是提高分数。
通过提升查询,我担心的是我无法控制正条款加权的程度。
非常感谢任何帮助或其他实施的建议。 (我真正想做的是为相关文档创建语言模型并使用它来排名,但我不知道如何通过弹性来轻松实现。)
答案 0 :(得分:1)
似乎您可以合并bool
查询并使用boosting query clauses调整提升值。
POST so/boost/ {"text": "apple computers"}
POST so/boost/ {"text": "apple pie recipe"}
POST so/boost/ {"text": "apple tree garden"}
POST so/boost/ {"text": "apple iphone"}
POST so/boost/ {"text": "apple company"}
GET so/boost/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"text": "apple"
}
}
],
"should": [
{
"match": {
"text": {
"query": "pie",
"boost": 2
}
}
},
{
"match": {
"text": {
"query": "tree",
"boost": 2
}
}
},
{
"match": {
"text": {
"query": "iphone",
"boost": -0.5
}
}
}
]
}
}
}
答案 1 :(得分:1)
或者,如果您想在索引时将语言模型编码到集合中,可以尝试此处描述的方法:Elasticsearch: Influence scoring with custom score field in document
答案 2 :(得分:0)
在查询时根据自定义/变量提升值(即条件提升)提升弹性搜索文档(基于优先级的搜索查询)。
Java编码示例:
customerKeySearch = QueryBuilders.constantScoreQuery(QueryBuilders.termQuery(keys.type", "xxx"));
customerTypeSearch = QueryBuilders.constantScoreQuery(QueryBuilders.termQuery("keys.keyValues.value", "xxxx"));
keyValueQuery = QueryBuilders.boolQuery().must(customerKeySearch).must(customerTypeSearch).boost(2f);
customerKeySearch = QueryBuilders.constantScoreQuery(QueryBuilders.termQuery(keys.type", "xxx"));
customerTypeSearch = QueryBuilders.constantScoreQuery(QueryBuilders.termQuery("keys.keyValues.value", "xxxx"));
keyValueQuery = QueryBuilders.boolQuery().must(customerKeySearch).must(customerTypeSearch).boost(6f);
描述和搜索查询:
弹性搜索有其内部得分计算技术,因此我们需要通过在java中为了使用自定义提升效果将disableCoord(true)属性设置为true来禁用此机制。
以下布尔查询正在运行查询,以根据提升值提升弹性搜索索引中的文档。
{
"bool" : {
"should" : [ {
"bool" : {
"must" : [ {
"constant_score" : {
"query" : {
"term" : {
"keys.type" : "XXX"
}
}
}
}, {
"constant_score" : {
"query" : {
"term" : {
"keys.keyValues.value" : "XXXX"
}
}
}
} ],
"boost" : 2.0
}
}, {
"bool" : {
"must" : [ {
"constant_score" : {
"query" : {
"term" : {
"keys.type" : "XXX"
}
}
}
}, {
"constant_score" : {
"query" : {
"term" : {
"keys.keyValues.value" : "500072388315"
}
}
}
} ],
"boost" : 6.0
}
}, {
"bool" : {
"must" : [ {
"constant_score" : {
"query" : {
"term" : {
"keys.type" : "XXX"
}
}
}
}, {
"constant_score" : {
"query" : {
"term" : {
"keys.keyValues.value" : "XXXXXX"
}
}
}
} ],
"boost" : 10.0
}
} ],
"disable_coord" : true
}
}