2013-08-14 35 views
5

Bir SOLR araması gerçekleştiriyorum. Örneğin Richard Chase yazdığımda, endekste tüm Richards'ı ve Johnny Chase gibi tüm Chases'leri alıyorum. Aslında sadece BOTH Richard AND Chase ile eşleşen tüm isimleri iade etmek istiyorum.SOLR aramasında EXACT eşleştirmesi gerçekleştiriliyor

benim yapılandırma ayarları

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
    <!-- in this example, we will only use synonyms at query time 
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> 
    --> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

ve benim sorgu metni

metin alanı

arar: Yanlış ne yaptığımı Richard Chase

herhangi bir fikir?

+0

'da bir kez daha geçersiz kılabilirsiniz ... aramanın, örneğin Richard John Chase veya Bay Richard Chase – fredseagul

cevap

9

Word Boundary rules'a bağlanan StandardTokenizerFactory kullanıyorsunuz.

Bu, sözcüklerin boşluklara bölüneceği anlamına gelir.

Richard Chase sadece Richard Chase tam içeren dokümanları döndürmek için yani gerçek tam bir eşleşme istiyorsanız

, o zaman sen-meli KeywordTokenizerFactory. Eğer söz olarak

Ama Richard John Chase istiyorum ama Johnny Chase, size Richard ve Chase için maçları istediğini söylüyor.

Ya Richard AND Chase arayabilir veya AND yerine OR olmak schema.xml yılında varsayılan operatörü değiştirebilir. Bu ayarın global olduğunu unutmayın.

+0

evet eşleşmesi gerekir. terimi için arama yapın ve sonra da sorgumu AND kullanarak oluşturun. Teşekkürler! – fredseagul

2

Her ikisi de Ricahard ve Chase'un birbirine yakın olduğu belgeleri almak için PhraseQuery (text:"Richard Chase") kullanmanız gerekir. Richard X. Chase'u da bulmak isterseniz, text:"richard chase"~1'u kullanabilirsiniz.

Eğer mm ayarlayabilirsiniz tam eşlemesi için http://www.solrtutorial.com/solr-query-syntax.html

0

Bkz (Minimum "Should" maçı) sizin solrconfig.xml içinde% 100'e sorgu ayrıştırıcı parametre

<str name="mm">100%</str> 

Bu minimum belirtir Bir sorguda eşleşmesi gereken yan tümce sayısı. Veya bu parametreyi (q.mm) istekte bulunarak sorgu zamanını