Solr

2010-08-05 13 views
7

içinde birden çok belirteci kullanabilme Ne yapabilmem, büyük/küçük harfe duyarlı olmayan ve dizinden kısmi sözcüklerle eşleşen bir sorgulama yapmak ve sonuçları almaktır.Solr

Değiştirilen anda ayarlanmış bir Solr şema var, böylece hangi durumda olursa olsun sonuçları sorgulayıp döndürebiliyorum. Yani, iPOd'u ararsam, iPod'un geri döndüğünü göreceğim. Bunu yapmak için kod şudur: Ben bize kısmi kelime maç sorgusu yapmanızı sağlayacaktır bu kodu bulduk, ama ben bir sahada iki tokenizers olabilir sanmıyorum

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <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="1"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> 
    </analyzer> 
... 
</fieldType> 

.

<fieldType name="text" class="solr.TextField" > 
    <analyzer type="index"> 
    <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
... 
</fieldType> 

Bu tokenizer'i sahada gerçekleştirmek için ne yapabilirim?
Veya onları birleştirmenin bir yolu var mı?
Yoksa bu görevi gerçekleştirebilmem için başka bir yol var mı?

cevap

7

NGram belirtecine sahip başka bir fieldType (yani, farklı bir ad) bildirin, ardından NGram ile fieldType ve standart "text" fieldType ile başka bir alanı kullanan bir alanı bildirin. Birini diğerine kopyalamak için copyField kullanın. Bakınız Indexing same data in multiple fields.

+1

Ama şimdi ne kadar sorgulamanız, sonuçların her iki belirteçle de gösterilmiş olan verilerde nasıl görüneceğini? Başka bir deyişle - her iki belirteçten aynı anda sonuç nasıl alınır? –

7

Bir alternatif, EdgeGramFilterFacgtory'yi varolan alana uygulamak ve mevcut jetonlayıcınızla (WhitespaceTokenizerFactory), örn.

<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" /> 

Bu değişmeden mevcut şemayı tutacak, daha sonra aşağıda gibi bir şey başka dizgeciklerini (NGramTokenizerFactory)

Kişisel Alan görünüm vardır Başka alan gerek olmazdı yani:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" /> 
    <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="1"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> 
    </analyzer> 
... 
</fieldType>