elasticsearch,Lucene,elasticsearch" /> elasticsearch,Lucene,elasticsearch" />

Lucene 弹性搜索:基于自定义逻辑的排序

Lucene 弹性搜索:基于自定义逻辑的排序,lucene,elasticsearch,Lucene,elasticsearch,我给弹性服务器搜索api提供了一个模式“主从式”。 它返回至少包含其中一个(主文档或从文档)的所有文档 它按分数的降序显示结果。 但是,我想将该顺序更改为我的自定义逻辑,即如果一个文档同时包含单词,即Master和Servant,则首先显示该文档 这可以实现吗?使用bool查询 从 bool查询采用了“匹配越多越好”的方法,因此来自每个match子句的分数将相加,以提供每个文档的最终_分数。同时匹配两个子句的文档将比仅匹配一个子句的文档得分更高 根据评论编辑: 为了澄清,我相信你想要这样的东西:

我给弹性服务器搜索api提供了一个模式“主从式”。 它返回至少包含其中一个(主文档或从文档)的所有文档

它按分数的降序显示结果。 但是,我想将该顺序更改为我的自定义逻辑,即如果一个文档同时包含单词,即Master和Servant,则首先显示该文档


这可以实现吗?

使用
bool
查询

bool查询采用了“匹配越多越好”的方法,因此来自每个match子句的分数将相加,以提供每个文档的最终_分数。同时匹配两个子句的文档将比仅匹配一个子句的文档得分更高

根据评论编辑

为了澄清,我相信你想要这样的东西:

{
  "query": {
    "bool": {
      "should": [
        { "match": { "field": "Master" }},
        { "match": { "field": "Servant"   }}
      ]
    }
  }
}

你的想法是错误的。如果所有的术语匹配,你应该考虑评分更高的方法;我的要求是,如果一个文档包含了这两个术语,那么它应该是最相关的或最高的分数,我所说的是:-“应该考虑得分更高的方法”…这意味着对于我的场景,如果我的文档都有单词,它应该有很高的分数。如何实现相同的功能。默认情况下,ES将使用TF/INF等算法计算分数。但是我想强制计算分数的逻辑。
match
查询中的默认(TF/IDF)分数是您要求的。同时包含“主”和“仆人”的文档将比仅包含一个匹配项的文档得分更高。如果您看到不同的行为,请使用
explain:true
发布查询结果。是的,我可以使用只有一个条件的bool查询,比如。。。假设:match=>{text=>“Master-Servant”},因此此查询还将包含同时包含Master和Servant的文档。我希望他们在上面