2010-08-23 21 views
6

Solr ile yeni başlayan ve sorgulama sonuçlarına giren istenmeyen karakterler ile ilgili bir sorunum var. Örneğin "foo bar" aradığımda "foo 'bar" vb. Ile içerik aldım. Sadece tam eşleşmeleri istiyorum. Bildiğim kadarıyla bu schema.xml dosyasında kurulabilir. Benim içerik alan türü:Solr sorgu/alan analizcisi

<fieldtype name="textNoStem" class="solr.TextField" positionIncrementGap="100"> 
<analyzer type="index"> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
</analyzer> 
<analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
</fieldtype> 

Çözümü biliyorsanız lütfen bize bildirin. Saygılarımızla.

+0

Netleştirmek gerekirse, "foo çubuğu", "foo 'bar" ile eşleşmemelidir çünkü foo, tek tırnak işareti ile çevrelenir ve "foo çubuğu", "bar" eksik olduğu için "foo" ile eşleşmemelidir. Demek istediğin bu mu? –

cevap

13

Her iki çözümleyici için de ilk satır belirtecin olmalıdır. Toklayıcı, metni daha küçük birimlere bölmek için kullanılır (çoğu zaman kelimeler). İhtiyacınız için WhitespaceTokenizerFactory muhtemelen doğru seçimdir.

Mutlak tam eşleşme istiyorsanız, tokenatörden sonra herhangi bir filtreye ihtiyacınız yoktur. Ancak, aramaların büyük/küçük harfe duyarlı olmasını istemiyorsanız, bir LowerCaseFilterFactory eklemeniz gerekir.

İki analizörünüzün bulunduğuna dikkat edin: 'index' türünden biri ve 'query' tipi diğeri. İsimlerden de anlaşılacağı gibi, birincisi, içeriği indekslerken, diğeri ise sorgu yaparken kullanılır. Neredeyse her zaman iyi olan bir kural, her iki analizör için aynı set tokuyucu/filtrelere sahip olmaktır.

+0

Teşekkürler, bu çok yardımcı oldu! – Daniel

+0

Jetonlamadan önce tek tırnak karakterlerini kaldırmak için PatternReplaceCharFilterFactory kullanmanızı öneririm. –

+0

Sorgu analizcisi, tüm malzeme indeksi analizörüne ek olarak ekstra bir Eşleme filtresi içeriyorsa belki daha iyi olur? – WoLfPwNeR

0

Sadece tam eşleşmeleri arıyorsanız, sorgulama zamanında StandardTokenizerFactory yerine KeywordTokenizerFactory kullanın.

+0

Hızlı cevap için teşekkür ederiz. Ancak KeywordTokenizerFactory kullanırken "foo bar" gibi sorgularla hiç sonuç alamıyorum. Analizöre sorgulamak için eklemeyi denedim, ancak yine de bir değişiklik yapılamadım. Fikirler tükeniyor .. – Daniel

0

Sanırım herhangi bir sonuç almazsınız, çünkü belirtme dizini zaten dizine eklenmiş verilerden farklı yapılır. Pascal'ın dediği gibi, whitespaceTokenizer sizin durumunuzda doğru seçimdir. İndeks ve sorgulama zamanında kullanın ve daha önce endekslenmiş verilerden değil, bazı verileri indeksledikten sonra sonuçları kontrol edin.

Gerçekten indeksleme ile sonuçları görmek için analiz sayfasını kullanmanızı öneririm.O oldukça kullanışlı.Şemada değişiklikler yapın, özü yenileyin, analiz sayfasına gidin ve adım adım analizi yapmak için ayrıntılı çıktıya bakın.