2011-03-12 19 views
6

Solr dizinine ekle: "American". "Amerika" ile arama yaptığımda sonuç yok.Solr'da stemming nasıl yapılandırılır?

Sonuç almak için schema.xml nasıl yapılandırılmalıdır?

akım yapılandırma:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
      <analyzer type="index"> 
       <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
       <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" /> 
       <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
       <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" /> 
       <filter class="solr.LowerCaseFilterFactory" /> 
       <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" /> 
       <filter class="solr.RemoveDuplicatesTokenFilterFactory" /> 
       <filter class="solr.PorterStemFilterFactory"/> 
      </analyzer> 
      <analyzer type="query"> 
       <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
       <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" /> 
       <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
       <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" /> 
       <filter class="solr.LowerCaseFilterFactory" /> 
       <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" /> 
       <filter class="solr.RemoveDuplicatesTokenFilterFactory" /> 
       <filter class="solr.PorterStemFilterFactory"/> 
      </analyzer> 
     </fieldType> 

cevap

4

Neden iki sözcük köklerini olurdu? senin analizörü türlerinin her ikisinden (kullanımdan kaldırıldı) EnglishPorterFilterFactory çıkarmadan
deneyin, endeksi yeniden ve daha sonra Amerika verecektir Amerikan arayışı olmadığını deneyin.

Bu işe yaramazsa, deneyebileceğiniz başka bir şey, her iki kök filtresini kaldırmak ve SnowballPorterFilterFactory'u language="English" ile eklemektir.

+0

Her iki yaklaşımı da denedi. Aynısı. – user657009

+0

index: "Yuvalar" \t "Yuvaları", "Yuva", "Yuvalama" ile arama yaptığımda sonuçlar vardır. index: "American" \t "American" ile sonuç bulunamadı. – user657009

+3

Yapmanız gereken ilk şey, Solr admin web uygulamanızı açmak, Analiz'e gitmek ve alan türünüzü/isminizi (her iki ayrıntılı çıktı alanını kontrol etmek) seçmek, Index alanında Amerika ve Query alanında Amerika'yı yazmaktır. Bu, tam olarak nasıl analiz edildiğini görmenizi sağlar, filtre ile filtrelenir. Daha ayrıntılı bir analiz için [Luke] 'a (http://www.getopt.org/luke/luke-0.9.9/lukeall-0.9.9.jar) zaten sahip değilseniz (çalıştırılabilir jar). Başlat ve Lucene dizinini yükle. İçeriğinizin tam olarak nasıl kaynaklandığını ve diğer birçok yararlı bilgiyi öğrenmek için kullanın ... –

0

analyzer için bir stemmer kullanmanız ve EnglishPorterFilterFactory'un @Marko'dan daha önce bahsedildiği gibi kullanımdan kaldırılması gerekir. Yani bunu analizörlerden kaldırmalısınız.

ben hem indeks ve sorgu analizörleri için SnowballPorterFilterFactory kullanılan -

<fieldType name="text_stem"> 
    <analyzer> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.SnowballPorterFilterFactory"/> 
     <!-- other filters --> 
    </analyzer> 
</fieldType> 

FIELDTYPE tanımıdır hoş kendi açıklayıcı, ama her ihtimale:

  • Simgeleştirici solr.WhitespaceTokenizerFactory: Bu işlem cümleleri kırmak, boşlukları boşluklar olarak kullanmak.

  • Filtre solr.SnowballPorterFilterFactory: Bu filtre her kelime (belirteç) bir doğan algoritmasını uygular. Yukarıdaki örnekte Snowball Porter stemming algoritmasını seçtim. Solr, popüler kaynak algoritmalarının birkaç uygulamasını sağlar.

Diğer çeşitli algoritmalara göz atabilirsiniz örn. HunspellStemFilterFactory, KStemFilterFactory da.

İlgili konular