Elasticsearch得分从0到1,用于搜索与现有文档相似的文档

问题描述

搜索与现有文档相似的文档时需要计算从0到1的相对得分吗? 因此,现有文档的得分为1,所有其他匹配文档的得分应根据该得分计算,且得分

const EmployeePage = props => {
  const {id} = props.match.params
  
  useEffect(() => {
    // fetch data
  },[id])
}

假设我们有索引match_doc_score/search_doc_score 和映射:

person

我在索引中有3个人: 人物1:

{
  "properties": {
    "person_id": {
      "type": "keyword"
    },"fullname": {
      "type": "text"
    },"email": {
      "type": "keyword"
    },"phone": {
      "type": "keyword"
    },"country_of_birth": {
      "type": "keyword"
    }
  }
}

人员2:

{
  "person_id": 1,"fullname": "John SNow","email": "john@gmail.com","phone": "111-11-11","country_of_birth": "Denmark"
}

人员3:

{
  "person_id": 2,"fullname": "SNow John","phone": "222-22-22","country_of_birth": "Denmark"
}

通过此查询,我们发现与“人物1”相似的人物:

{
  "person_id": 3,"fullname": "Peter Wislow","email": "peter@gmail.com","country_of_birth": "Denmark"
}

如您所见:

  • 人1和人2匹配:全名,电子邮件,出生国家/地区。
  • 第1个人和第3个人的匹配方式是:电话,出生国家/地区。

如果我们的订单中的索引(人1)完全匹配,是否有0..1的得分?

我知道有一个more_like_this查询,但是在现实生活中搜索查询可能很复杂,因此{ "query": { "bool": { "should": [ { "match": { "fullname": { "query": "John SNow","boost": 6 } } },{ "term": { "email": { "value": "john@gmail.com","boost": 5 } } },{ "term": { "phone": { "value": "111-11-11","boost": 4 } } },{ "term": { "country_of_birth": { "value": "Denmark","boost": 2 } } } ],"must_not": [ { "term": { "person_id": 123 } } ] } } } 并不是一个好的选择。甚至elasticsearch文档都说,如果您需要对查询的更多控制,请使用布尔查询组合。

解决方法

尚未尝试过,但看起来像功能得分的field value factor可能会解决您的查询。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...