问题描述
在搜索与现有文档相似的文档时需要计算从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可能会解决您的查询。