Elasticsearch 应该在不计算相关性(_score)的情况下进行查询
Elasticsearch should query without computing relevance (_score)
我正在创建对两个字段进行操作的过滤查询。我想避免通过 Elasticsearch 计算相关性。如何在不移动到查询上下文的情况下实现 OR 语句。
我的简化模型有两个布尔字段:
{
is_opened,
is_send
}
我想用逻辑准备查询:
(is_opened == true AND is_send == true) OR (is_opened == false)
换句话说,我想排除具有以下字段的文档:
is_opened == true AND is_send == false
我的查询是这样的:
GET documents/default/_search
{
"query": {
"bool": {
"should": [
{
"bool":{
"must":[
{"term": {"is_opened":true}},
{"term": {"is_send":true}}
]
}
},
{
"bool":{
"must":[
{"term": {"is_opened":false}}
]
}
}
]
}
}
}
逻辑上它按我的预期工作,但 Elasticsearch 计算 相关性。
我不需要它,因为最后我按另一个字段对结果进行排序,所以它是优化查询的地方。
我问这个是因为 Frequently used filters will be cached automatically by Elasticsearch, to speed up performance.
我的结果计算了 _score 字段,所以我认为上面的查询是在查询上下文中执行的,因此 Elasticsearch 不会自动缓存它。
将来我想创建在 status 字段上运行的查询,其中的逻辑会更复杂。我仍然需要知道如何阻止计算 _score.
我注意到将 should 更改为 filter 块计算 _score 但作为 必须运算符。是否可以更改 filter 行为?
是否可以使用其他查询?
如何强制 Elasticserach 停止计算 _score?
只需将您的查询包装在 constant_score
query:
中
GET documents/default/_search
{
"query": {
"constant_score": {
"filter": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"term": {
"is_opened": true
}
},
{
"term": {
"is_send": true
}
}
]
}
},
{
"bool": {
"must": [
{
"term": {
"is_opened": false
}
}
]
}
}
]
}
}
}
}
}
我正在创建对两个字段进行操作的过滤查询。我想避免通过 Elasticsearch 计算相关性。如何在不移动到查询上下文的情况下实现 OR 语句。
我的简化模型有两个布尔字段:
{
is_opened,
is_send
}
我想用逻辑准备查询:
(is_opened == true AND is_send == true) OR (is_opened == false)
换句话说,我想排除具有以下字段的文档:
is_opened == true AND is_send == false
我的查询是这样的:
GET documents/default/_search
{
"query": {
"bool": {
"should": [
{
"bool":{
"must":[
{"term": {"is_opened":true}},
{"term": {"is_send":true}}
]
}
},
{
"bool":{
"must":[
{"term": {"is_opened":false}}
]
}
}
]
}
}
}
逻辑上它按我的预期工作,但 Elasticsearch 计算 相关性。 我不需要它,因为最后我按另一个字段对结果进行排序,所以它是优化查询的地方。 我问这个是因为 Frequently used filters will be cached automatically by Elasticsearch, to speed up performance.
我的结果计算了 _score 字段,所以我认为上面的查询是在查询上下文中执行的,因此 Elasticsearch 不会自动缓存它。
将来我想创建在 status 字段上运行的查询,其中的逻辑会更复杂。我仍然需要知道如何阻止计算 _score.
我注意到将 should 更改为 filter 块计算 _score 但作为 必须运算符。是否可以更改 filter 行为?
是否可以使用其他查询? 如何强制 Elasticserach 停止计算 _score?
只需将您的查询包装在 constant_score
query:
GET documents/default/_search
{
"query": {
"constant_score": {
"filter": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"term": {
"is_opened": true
}
},
{
"term": {
"is_send": true
}
}
]
}
},
{
"bool": {
"must": [
{
"term": {
"is_opened": false
}
}
]
}
}
]
}
}
}
}
}