2013-07-02 2 views
5

私のSOLR検索結果でハイフネーションの用語を取得できません。たとえば、スーパーマン、スーパーマンなどのような検索をしようとすると、検索結果にスーパーマン、スーパーマン3などのタイトルが表示されます。次のようにSolr:ハイフネーションされた用語を検索すると0の結果が得られます

FIELDTYPEは次のとおりです。

<fieldType name="autocomplete_edge" class="solr.TextField"> 
    <analyzer type="index"> 
     <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt" /> 
     <tokenizer class="solr.KeywordTokenizerFactory" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="([\.,;:-_])" replacement=" " replace="all" /> 
     <filter class="solr.EdgeNGramFilterFactory" maxGramSize="30" minGramSize="1" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="([^\w\d\*æøåÆØÅ ])" replacement="" replace="all" /> 
    </analyzer> 
    <analyzer type="query"> 
     <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt" /> 
     <tokenizer class="solr.KeywordTokenizerFactory" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="([\.,;:-_])" replacement=" " replace="all" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="([^\w\d\*æøåÆØÅ ])" replacement="" replace="all" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="^(.{30})(.*)?" replacement="$1" replace="all" /> 
    </analyzer> 
</fieldType> 

助けてください。

よろしく

+0

fieldtypeをよりわ​​かりやすい形式で投稿できますか? – Jayendra

+0

こんにちは、元の質問は、より読みやすい形式のコンテンツを持つように編集されています。スーパー、スーパー、スーパーマン、スーパーマンのような検索用語は、希望のタイトルを返します。それが失敗した場合は、0の結果を与えるスーパーマン –

答えて

2

私はあなたのユースケースのためWordDelimiterFilterFactoryを使用してお勧めします。

WordDelimiterFilterFactoryを使用すると、特殊文字と数字で分割できるトークンを生成できます。また、オリジナルを維持して検索語句と一致するようにすることもできます。


generateWordParts変換しますsuper-man - >super, man
splitOnNumerics生成する超MAN3 - >super, man, 3
catenateWords変換しますsuper-man - >superman
catenateAll変換しますsuper-man3 - >superman3

だから、これはあなたの能力を提供します同じ単語の組み合わせに一致する

0

あなたがトークンであると仮定しますあなたのハイフンをOKにしてください(下記の答えにあるWordDelimiterFilterFactoryを参照)。あなたのソルバー設定ファイルのデフォルトフィールド(df)か、トークン化しているフィールドと同じパラメータ(& df = xxxx)として渡されますか?

デフォルトのフィールドがあると言う:テキスト とあなたのインデックスフィールドは次のとおりです。勝った

parsedquery_toString: "+name:super +text:man" 

:我々は

name:super man 

スーパーマンを照会した場合、実際のクエリがある

に名前を付けますマッチしない。あなたが引用符でスーパーマンを問い合わせる場合:

name:"super man" 

それが正常に動作しますが、あまり柔軟性のある必要があります。

parsedquery_toString: "name:\"super man\"", 

名前(例えばインデックスフィールドに一致する)にあなたのDFを設定した場合、それが与える:

parsedquery_toString: "+name:super +name:man" 

か、直接問い合わせることができ

name:super name:man 

注意dismaxを使用している場合は、まだ一致していない場合は、mmフィールドを調べる必要があります。

関連する問題