2012-08-16 3 views
6

複数語問合せ:動的にフィールドの選択(スペルチェック)私は、次の構成でのSolrの提案・コンポーネントを使用しています

のschema.xml

<fieldType name="textSpell" class="solr.TextField"> 
<analyzer> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
</fieldType> 
<field name="image_memo" type="text_general"/> 
<field name="username" type="text_general"/> 
<field name="image_memo" type="text_general"/> 
<field name="image_text" type="text_general"/> 
<!-- More fields included here --> 
<field name="spell" type="textSpell" indexed="true" stored="true" multiValued="true"/> 
<copyField source="*" dest="spell"/> 

solrconfig.xml

<searchComponent class="solr.SpellCheckComponent" name="suggest"> 
    <lst name="spellchecker"> 
     <str name="name">suggest</str> 
     <str name="classname">org.apache.solr.spelling.suggest.Suggester</str> 
     <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str> 
     <str name="field">spell</str> 
     <str name="buildOnCommit">true</str> 
    </lst> 
</searchComponent> 

<requestHandler class="org.apache.solr.handler.component.SearchHandler" 
    name="/suggest"> 
    <lst name="defaults"> 
     <str name="spellcheck">true</str> 
     <str name="spellcheck.dictionary">suggest</str> 
     <str name="spellcheck.onlyMorePopular">true</str> 
     <str name="spellcheck.count">6</str> 
     <str name="spellcheck.collate">true</str> 
     <str name="spellcheck.collateExtendedResults">true</str> 
     <str name="spellcheck.collate">true</str> 
     <str name="spellcheck.maxCollations">6</str> 
     <str name="spellcheck.maxCollationTries">1000</str> 
     <str name="spellcheck.extendedResults">true</str> 
     <str name="spellcheck.collateParam.mm">100%</str> 
    </lst> 
    <arr name="components"> 
     <str>suggest</str> 
     <str>query</str> 
    </arr> 
</requestHandler> 

ご覧のとおり、提案クエリに使用しているフィールドspellがあります。 これは、複数の用語のクエリですら優れています。

しかし、私が必要とするのは、選択したフィールドだけを検索することです。
たとえば、フィールドに対してのみ有効な候補を表示するにはimage_memousername フィールドを動的に追加および削除して検索することができます。

私はこのような何かを行うことができることを知っている:

Q =(image_memo:*検索* OR image_username:*検索*)

をしかし、これはあなたの場合dramtically鈍化しています多くのフィールドと複数の用語のクエリを取得しました。

例:用語またはユーザ名:用語 ORフィールド:用語 ORフィールド1:用語 OR フィールド2:用語term, term1 and term2.

((メモ用のフィールドmemo, username, field, field1 and field2での検索)AND(メモ:term1 ORユーザ名:term1 ORフィールド:term1 ORフィールド1:TERM1 ORフィールド2:TERM1)AND(メモ:TERM2 OR ユーザ名:TERM2 ORフィールド:TERM2 ORフィールド1:TERM2 OR フィールド2:TERM2))

spellフィールドを動的に選択する方法はありますか。または、多値フィールドでのみ特定のフィールドを検索できる方法がありますか?

私はApach Solr 4 Alphaを使用しています。

+0

どのソリューションがあなたのために機能したのかを投稿できますか、私はあなたが与えられた答えを受け入れていないことがわかります。その場合、回答を投稿できますか?私も同様の課題に直面しています。ありがとう – nish

答えて

0

あなたがする必要があるのは、DismaxまたはeDismaxです。 SpellcheckComponentは、クエリパラメータを使用してすべての提案を自動的に実行します。

だから、あなたはこのように照会する必要があり:

/suggest?q={!dismax}term1 term2 term3&qf=memo username field field1 field2 

または

/suggest?q=term1 term2 term3&defType=dismax&qf=memo username field field1 field2 

あなたは(e)のdismaxを使用しない場合は、カスタムqueryparserを実装することができます。

関連する問題