2012-02-15 5 views
12
우리는 트윗, 나는 @username 또는 #hashtags를 검색 할 수 있도록 다음과 같은 설정으로 WordDelimiterFactory을 사용하고 있지만 검색 SOLR 버전 3.5을 사용하는

언급 패치를 설치했지만 예상대로 작동하지 않는 것 같습니다. 뭔가 빠졌습니까?SOLR 해시 태그를 검색 또는

https://issues.apache.org/jira/browse/SOLR-2059

그러나 @username을 검색 하시나요 또한 단지 아이디 또는 #hashtag 그냥 hastag에 대한 결과를 반환에 대한 결과를 반환한다. 이것을 어떻게 할 수 있습니까?

전체 필드 유형 : 그들은 types 속성으로 WordDelimiterFactory에 handleAsChar 속성을 교체 한 것처럼

<fieldType name="textnostem" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> 
    <analyzer type="index"> 
    <charFilter class="solr.HTMLStripCharFilterFactory"/> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords.txt" 
      enablePositionIncrements="true" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" 
      generateWordParts="1" 
      generateNumberParts="1" 
      catenateWords="1" 
      catenateNumbers="1" 
      catenateAll="0" 
      splitOnCaseChange="0" 
      splitOnNumerics="0" 
      preserveOriginal="1" 
      /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords.txt" 
      enablePositionIncrements="true" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" 
      generateWordParts="1" 
      generateNumberParts="1" 
      catenateWords="1" 
      catenateNumbers="1" 
      catenateAll="0" 
      splitOnCaseChange="0" 
      splitOnNumerics="0" 
      preserveOriginal="1"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 

<fieldType name="textnostem" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> 
    <analyzer type="index"> 
    <charFilter class="solr.HTMLStripCharFilterFactory"/> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords.txt" 
      enablePositionIncrements="true" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" 
      generateWordParts="1" 
      generateNumberParts="1" 
      catenateWords="1" 
      catenateNumbers="1" 
      catenateAll="0" 
      splitOnCaseChange="0" 
      splitOnNumerics="0" 
      preserveOriginal="1" 
      /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords.txt" 
      enablePositionIncrements="true" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" 
      generateWordParts="1" 
      generateNumberParts="1" 
      catenateWords="1" 
      catenateNumbers="1" 
      catenateAll="0" 
      splitOnCaseChange="0" 
      splitOnNumerics="0" 
      preserveOriginal="1"/>  
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

<fieldType name="textnostem" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> 
    <analyzer type="index"> 
    <charFilter class="solr.HTMLStripCharFilterFactory"/> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords.txt" 
      enablePositionIncrements="true" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" 
      generateWordParts="1" 
      generateNumberParts="1" 
      catenateWords="1" 
      catenateNumbers="1" 
      catenateAll="0" 
      splitOnCaseChange="0" 
      splitOnNumerics="0" 
      preserveOriginal="1" 
      handleAsChar="@#" 
      /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords.txt" 
      enablePositionIncrements="true" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" 
      generateWordParts="1" 
      generateNumberParts="1" 
      catenateWords="1" 
      catenateNumbers="1" 
      catenateAll="0" 
      splitOnCaseChange="0" 
      splitOnNumerics="0" 
      preserveOriginal="1" 
      handleAsChar="@#" 
      />  
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 
+0

사용중인 전체 fieldType 정의를 표시 할 수 있습니까? 그렇다면 다른 필터 또는 토큰 화가가 결과에 영향을 줄 수 있습니까? –

+1

개인적으로 색인에 두 개의 필드를 추가합니다. 하나는 태그 목록 용이고 다른 하나는 태그 목록 용입니다. 인덱스에 추가 할 때 트윗을 분석하십시오. 그런 식으로 새로운 기능에 의존하지 않습니다. –

답변

15

좋아, 그럼 당신이 언급 한 SOLR-2059 패치를 통해 읽기, 그것은 보인다. 여기 분석기에서 그 속성에 대한 지정은, Tokenizers 및 토큰 SOLR 위키 페이지 필터 :

타입 = "wdfftypes.txt"이 필터 정의 토큰을 허용한다. 파일은 solr/conf 디렉토리에 있어야하며 항목은 따옴표없이 "% => ALPHA"또는 "\ u002C => DIGIT"형식이어야합니다. 허용되는 유형은 LOWER, UPPER, ALPHA, DIGIT, ALPHANUM, SUBWORD_DELIM입니다. 우리는이 문서 플러스 SOLR-2059에서 파일의 예를 가지고가는 경우에

가 그럼, 내가 추천 할 것입니다 다음 다음과 같이

<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="1" types="twittertypes.txt"/>

가 그런 다음 twittertypes.txt 파일을 정의하고 Solr 인스턴스 (아마도 conf 폴더)의 schema.xml 파일과 같은 폴더에 저장하십시오. 이 텍스트 파일에서 주석으로 처리되어 있기 때문에 당신이 해시 기호의 유니 코드 문자 (UTF-8)를 사용할 필요가

# A customized type mapping for WordDelimiterFilterFactory 
# the allowable types are: LOWER, UPPER, ALPHA, DIGIT, ALPHANUM, SUBWORD_DELIM 
#  
# the default for any character without a mapping is always computed from 
# Unicode character properties 

# Map the $, %, '.', and ',' characters to DIGIT 
# This might be useful for financial data. 
@ => ALPHA 
\u0023 => ALPHA 

알 수 있습니다.

모든 문서에 따르면이 방법으로 문제를 해결하고 # 및 @ 기호를 알파 문자로 처리해야 원하는 동작을 제공 할 수 있습니다.

+2

고마워 페이지, 어젯밤에 너를 언급 한대로 일했다. – sesmic

+0

나는 위의 모든 작업을 수행하고 solr 서비스를 다시 시작했지만 여전히 #pizza 및 pizza를 검색하면 동일한 결과가 나오고 모든 단서 또는 더 많은 단계를 따라야합니까? – PepperoniPizza

+0

구성을 변경 한 후 문서의 색인을 다시 지었습니까? 문서가 색인되는 방식에 영향을주는 schema.xml 파일을 변경할 때마다 색인 된 용어에 변경 사항이 반영되도록 문서를 다시 색인화해야합니다. –

관련 문제