2017-07-20 3 views
0

私は「サマラ」「サミール」、または「サミュエル」のような部分文字列としてクエリを含む「SAM」文書を照会するとき、私は、何らかの理由で、名前検索と協力していますは一見等しい重量で返されます。部分文字列として含まれている結果ではなく、solrの正確なクエリテキストに重大な重みを付けるにはどうすればよいですか?

これはSolrの組み込み機能で、検索語を含む文字列をサブストリングとして解析できますか?正確なクエリ自体に大きな重みを付けてから代替案に移行する方法はありますか?

元のテキストを同義語よりも重く重み付けするためにすでに2つの別々の文字を持っていますが、この部分文字列の問題を回避する方法はわかりませんでした。ここで

は私FIELDTYPE定義です:

<fieldType class="solr.TextField" name="fullTextName" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 

     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 

    </analyzer> 
</fieldType> 

すべてのヘルプは本当にいただければ幸いです。

答えて

1

それはSolrの中で可能です:

1)あなたは2つのフィールドタイプを定義しますfullTextNameとfullTextNameExact その差はインデックス時間分析となり、特にあなたがエッジNGRAMを持っていないために、正確なフィールドタイプをしたいですトークンフィルタ。

2)あなたは、2つのフィールド、各タイプ

3)あなたはdismaxクエリパーサやedismaxクエリパーサーを使用して要求ハンドラを定義するごとに1つ作成します。[1]

4)使用するリクエストパラメータは「qf」です。このパラメータを使用すると、検索に関連するさまざまなフィールドを表現し、異なるブーストで重み付けすることができます。あなたが使用することができ、あなたの場合は :

<str name="qf">fullTextNameExact^3 fullTextName</str> 

これは強力な完全一致の結果を後押しそれでも自動補完が可能になります。

[1] https://cwiki.apache.org/confluence/display/solr/The+Extended+DisMax+Query+Parser

+0

を私はあなたがこれらの二つの別々のフィールドに提案するものでしたが、私は 'exactName'フィールドに「クエリフィールド」(1付きに指定した場合でもthough--混乱しています'EdgeNgramFilter'もありません)私は依然として部分文字列にマッチした文書にヒットしました。 q = samのように、結果はsamirかもしれません。私は何か他のものを逃すことができますか?ありがとう! – Sam

+0

ここで、exactNameに使用したfieldTypeのfieldType定義を投稿できますか? このフィールドタイプには、エッジNgramトークンフィルタリングを使用しないでください。 –

+0

私は投稿にそれを含めました – Sam

関連する問題