Function_score 在 bool 查询中使用 score_mode 作为 max 但像 sum 一样工作?
Function_score using score_mode inside a bool query as max but working like sum?
我正在使用 function_score 以便我可以使用它的 score_mode 作为我正在使用的布尔查询的最大分数 实际上我有两个布尔查询现在我应该想要文档的分数要成为两个查询中的最高分,我的代码在下面给出,但是当我传递一个字符串来匹配这两个查询时,将添加分数而不是取最大值任何人都可以告诉我如何实现它。
"function_score": {
"boost_mode": "max",
"score_mode": "max",
"query": {
bool: {
"disable_coord": true,
"should": [
{
bool: {
"disable_coord": true,
"must": [
{
"constant_score": { // here i am using this because to remove tf/idf factors from my scoring
boost: 1.04,
"query": {
query_string: {
query: location_search,
fields: ['places_city.city'],
// boost: 1.04
}
}
}
}
]
}
},
{
"constant_score": { // here i am using this because to remove tf/idf factors from my scoring
boost: 1,
"query": {
"fuzzy_like_this" : {
"fields" : ["places_city.city"],
"like_text" : "bangaloremn",
"prefix_length": 3,
"fuzziness": 2
}
}
}
}
], "minimum_should_match": 1
}
}
}
是的,布尔查询按设计求和。如果你想要两个查询的最大分数,你应该查看 dismax query. Dismax is designed to pick a "winner".
粗略地说,这看起来像
{"query":
"dismax": {
"queries": [
{ /* your first constant_score query above */},
{/* your second constant_score query from above */}
]
}
}
遗憾的是,函数评分查询并没有很好的方法同时处理多个文本查询。参见 this question。如果你想用多个查询的分数做任何复杂的数学运算,Solr 实际上在这方面有更多的灵活性。
我正在使用 function_score 以便我可以使用它的 score_mode 作为我正在使用的布尔查询的最大分数 实际上我有两个布尔查询现在我应该想要文档的分数要成为两个查询中的最高分,我的代码在下面给出,但是当我传递一个字符串来匹配这两个查询时,将添加分数而不是取最大值任何人都可以告诉我如何实现它。
"function_score": {
"boost_mode": "max",
"score_mode": "max",
"query": {
bool: {
"disable_coord": true,
"should": [
{
bool: {
"disable_coord": true,
"must": [
{
"constant_score": { // here i am using this because to remove tf/idf factors from my scoring
boost: 1.04,
"query": {
query_string: {
query: location_search,
fields: ['places_city.city'],
// boost: 1.04
}
}
}
}
]
}
},
{
"constant_score": { // here i am using this because to remove tf/idf factors from my scoring
boost: 1,
"query": {
"fuzzy_like_this" : {
"fields" : ["places_city.city"],
"like_text" : "bangaloremn",
"prefix_length": 3,
"fuzziness": 2
}
}
}
}
], "minimum_should_match": 1
}
}
}
是的,布尔查询按设计求和。如果你想要两个查询的最大分数,你应该查看 dismax query. Dismax is designed to pick a "winner".
粗略地说,这看起来像
{"query":
"dismax": {
"queries": [
{ /* your first constant_score query above */},
{/* your second constant_score query from above */}
]
}
}
遗憾的是,函数评分查询并没有很好的方法同时处理多个文本查询。参见 this question。如果你想用多个查询的分数做任何复杂的数学运算,Solr 实际上在这方面有更多的灵活性。