2012-11-09 5 views

답변

1

당신은 중복 된 값을 제거하기 위해 클라이언트 측에서 그것을 처리해야합니다.

토큰을 걸러 내려면 RemoveDuplicatesTokenFilterFactory (같은 위치에서 동일한 텍스트에 대해 작동)과 같은 구현을 사용자 정의 할 수 있습니다. 기본적으로 확장 기능을 작성하십시오. 또는

또한 패 시팅에 다중 값 필드를 사용하면면 처리 된 필드의 값이 한 번만 계산됩니다. 따라서 동일한 값을 여러 개 추가하더라도 패싯 개수 항목에 단일 값으로 반영됩니다. 이걸 시험해 봤어. 당신도 확인할 수 있습니다.

그러나 중복 값은 lengthNorm의 변경을 초래하므로 점수에 영향을 줄 수 있습니다.

0

Solr에서는 처리 할 수 ​​있지만 UpdateRequestProcessor이므로 인덱싱 전에 발생하므로 분석 체인에 대해 배울 필요가 없습니다.

당신은 자바 또는 내가 같은 작업을 수행하기 위해 고군분투했다 ScriptUpdateProcessor

3

와 스크립트 언어의 번호를 사용할 수 있습니다. 이것은 나를 위해 일했다. 당신의 solrconfig.xml

<updateRequestProcessorChain name="deduplicateMultiValued" default="true"> 
     <processor class="org.apache.solr.update.processor.UniqFieldsUpdateProcessorFactory"> 
      <lst name="fields"> 
       <str>multivaluedFieldXYZ</str> 
      </lst> 
     </processor> 
     <processor class="solr.RunUpdateProcessorFactory" /> 
</updateRequestProcessorChain> 
+0

현재 버전의 Solr에서는 내부 lst/str 줄이 다음과 같이 한 줄로 표시됩니다. multivaluedFieldXYZ Ethan

+0

이 경우 copyFields에서는 작동하지 않지만 문서가 가져올 때는 색인 생성. 이 시점에서 모든 중복 삽입이 제거됩니다. –

0

이 구성은 파티에 정말 늦게 SOLR 5.3.1에 대한

<updateRequestProcessorChain name="distinct-values" default="true"> 
    <processor class="solr.DistributedUpdateProcessorFactory"/> 
    <processor class="solr.UniqFieldsUpdateProcessorFactory"> 
     <str name="fieldName">field1</str> 
     <str name="fieldName">field2</str> 
    </processor> 
    <processor class="solr.RunUpdateProcessorFactory" /> 
</updateRequestProcessorChain> 
2

을 작동하지만 상단 대답은 SOLR 6.0에서 나를 위해 작동하지 않았다에 아래의 프로세서를 추가 다중 값 필드에 중복 항목을 추가하려고했습니다. UniqFieldsUpdateProcessorFactory 바로 전에 프로세서가 누락되었습니다. 그래서 내 solrconfig.xml이 같은 추가 뭔가 일 : YourFieldA 및 YourFieldB 당신의 schema.xml에서 필드를 정의

<updateRequestProcessorChain name="uniq-fields"> 
<processor class="org.apache.solr.update.processor.DistributedUpdateProcessorFactory"/> 
<processor class="org.apache.solr.update.processor.UniqFieldsUpdateProcessorFactory"> 
    <str name="fieldName">YourFieldA</str> 
    <str name="fieldName">yourFieldB</str> 
</processor> 
<processor class="solr.RunUpdateProcessorFactory" /> 

. 당신은 또한 적절한 requestHandler 즉,이를 추가해야합니다 :

<requestHandler name="/update" class="solr.UpdateRequestHandler" > 
<lst name="defaults"> 
    <str name="update.chain">uniq-fields</str> 
</lst> 

이 만 추가되는 중복을 방지 할뿐만 아니라 지정된 필드 업데이트에 색인에서 모든 중복을 제거하지 않습니다.

관련 문제