2017-02-16 3 views
8

중복 된 필드가있는 일부 데이터가 있습니다. 중복 결과가 검색 결과 상단에 함께 표시되는 것을 원하지는 않지만이를 모두 제거하고 싶지는 않습니다. 나는 단지 더 나은 품종을 원한다. 그래서 동일한 field-value의 두 번째, 세 번째 ... n 번째 출현이 강등 될 것이다. ElasticSearch로 가능합니까? 예를 들어ElasticSearch에서 처벌 - 중복을 제거하지 않음 -

:

( this 기준)
curl -XPOST 'http://localhost:9200/employeeid/info/1' -d '{ 
"name": "John", 
"organisation": "Apple", 
"importance": 1000 
}' 

curl -XPOST 'http://localhost:9200/employeeid/info/2' -d '{ 
"name":"John", 
"organisation":"Apple", 
"importance": 2000 
}' 

curl -XPOST 'http://localhost:9200/employeeid/info/3' -d '{ 
"name": "Sam", 
"organisation": "Apple", 
"importance": 0 
}' 

우리가 검색이 중요성에 의해 증폭된다고 가정하면, "애플"검색을위한 자연적인 결과는 John, John, Sam 될 것이다. 내가 찾고있는 것은 결과를 만드는 방법이다. John, Sam, John, 또 다른 John이 이미 나타나기 때문에 두 번째로 불이익을 주었다.

+0

_score에 대한 값을 가정 https://www.elastic.co/ guide/ko/elasticsearch/reference/current/modules-scripting-painless.html, https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-advan ced-scripting.html. –

답변

3

모든 중복 항목을 찾고 중복 항목 중 하나를 '더 중요하게'선택하여 색인 시간에 중요도 필드를 조정할 수 있습니다. 가장 높은 점수를 가진 복제가 선택 될 수 있습니다. 당신의 예에서, 나는 기존의 가치에 5000을 더할 것이다.

이제 결과는 다음과 같이됩니다.

존/애플-7000, 샘/애플-5000, 존/애플-1000

그러나 이것은 당신이 그것으로 점수를 조정하는 만에 5000을 변경하기로 결정하는 경우가 색인을 다시해야 의미 중요성의 정도에 달려있다.

"script_score": { 
    "script": "(_score * 5000) + doc['importance'].value + (doc['authority'].value * 5000)" 
} 
- :

또는, 당신은 당신이 가장 높은 중요성 중복 1의 값을 제공하고 쿼리시 단계를 제공하기 위해 채점 기능을 사용할 수있는 '권위'라는 또 다른 필드를 추가 할 수 있습니다 _score 승수 원래 순위 알고리즘에 의존

참고 이것은 I가 가능한 용액 스크립트 및 점수를 사용 판단 0.0-1.0

+1

_score는 0과 1 사이에 바인딩됩니다. 'authority'필드를 사용하여 계산할 때 관련성이 있다고 생각합니까? 덕분에 – Adonis

+0

. 좋은 점수 - 원래 점수 알고리즘에 따라 _score에 대한 메모를 조정하고 추가 할 수 있습니다. – abdollar

+0

감사. 앞으로 더 직접적인 방법이 있기를 바랍니다.하지만 이와 같은 추가 인덱싱 작업을 수행 할 수 있습니다. – mahemoff