2012-01-11 20 views
1

私はstackoverflowから多くの質問を読んだが、答えを見つけられなかった、どのようにSolrプレフィックス検索を作る。例えば、私は "solr documentation is unreadable"というテキストを持っています。 "solr docu *"、 "unread * documentation"、 "unreadable is so *"ではなく "un * so *"のようなものを見つける必要があります。接頭辞検索のSolrスキーマ、howto?

<fieldType name="prefix_search" class="solr.TextField"> 
    <analyzer> 
    <tokenizer class="solr.LowerCaseTokenizerFactory"/> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="30" side="front"/> 
    </analyzer> 
</fieldType> 

ただし、予期しない結果が返ってくることがありますが、「un * so *」クエリでも動作することがあります。おそらくPHP SolrClientに問題がありますか?返信ありがとうございます!

答えて

1

ReversedWildcardFilterFactoryは、それは次のようにカールで簡単にテストすることができ、正確に何をしたいです:

curl 'http://example.com:8080/solr/select?q=prefix_search:un*+AND+prefix_search:so*'

<!-- Just like text_general except it reverses the characters of 
    each token, to enable more efficient leading wildcard queries. --> 
<fieldType name="text_general_rev" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.ReversedWildcardFilterFactory" withOriginal="true" 
     maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 
関連する問題