2012-02-15 25 views
12
Biz Tweetler, ben @username veya #hashtags için arama yapabilmek için, aşağıdaki ayarlar ile WordDelimiterFactory kullanıyorum gerçi aramak için Solr sürüm 3.5 kullanıyorsanız

bahseder yama ama bu beklediğim gibi çalışmıyor, bir şey mi eksik?Solr hashtag arayışı veya

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

Ama @username ararken Ayrıca sadece kullanıcı adı veya #hashtag sadece HASTAG sonucunu dönüyor sonuçlarını dönüyor. Bunu nasıl başarabilirim?

Bütün Alan Türü: onlar types özniteliği ile WordDelimiterFactory üzerinde handleAsChar niteliğini yerini almıştır gibi

<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

Kullandığınız tüm fieldType tanımını gösterebilir misiniz, bu nedenle başka filtreler veya belirteceler sonuçlarınızı etkiliyor olabilir mi? –

+1

Şahsen, indeksinize iki tane etiket ekleyeceğim. Bunları dizine eklediğinizde bunları tweet'lerinizden ayrıştırın. Bu şekilde yeni işlevselliklere güvenmiyorsunuz. –

cevap

15

Tamam, bu nedenle söz SOLR-2059 yama aracılığıyla okuma görünüyor. İşte Analizörleri o özellik için özelliğidir, Tokenizers ve Token Solr Wiki sayfasını Filtreler:

türleri = "wdfftypes.txt" Bu filtre için özelleştirilmiş sembolleştirmeyi verir. Dosya solr/conf dizininde bulunmalıdır ve girişler formdadır (tırnak işaretleri olmadan) "% ​​=> ALPHA" veya "\ u002C => DIGIT". İzin verilen türler şunlardır: ALT, ÜST, ALPHA, DIGIT, ALPHANUM, SUBWORD_DELIM. Bu dokümanları, artı SOLR-2059 dosyanın örneğini alırsak

Öyleyse, ben tavsiye ederim şu şu şekildedir:

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

Sonra twittertypes.txt dosyasını tanımlamak ve Solr örneğindeki schema.xml dosyanızla aynı klasöre yerleştirin (büyük olasılıkla conf klasörü). o metin dosyasında yorum olarak kabul edilir beri, karma sembolü için Unicode karakter (UTF-8) kullanmak gerekir

# 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 

dikkat edin.

Tüm belgelere göre, bu sorunu düzeltmeli ve aradığınız davranışı sağlayacak olan # ve @ simgelerini alfa karakterleri olarak ele almalıdır.

+2

Teşekkürler Paige, dün gece geç saatlerde anladım, senin de bahsettiğin gibi çalıştım. – sesmic

+0

Yukarıdakilerin tümünü yeniden başlattım ve tekrar başlattım, hala #pizza ve pizza için aynı sonucu, herhangi bir ipucu veya takip etmem gereken başka bir adımı mı arıyorsunuz? – PepperoniPizza

+0

Yapılandırma değişikliklerini yaptıktan sonra belgelerinizi yeniden dizine eklediniz mi? Schema.xml dosyasında, belgelerin endekslendiğini etkileyen herhangi bir değişiklik yaptığınızda, endeksli terimlere yansıtılacak değişikliklerin belgelerini yeniden dizelemelisiniz. –