2017-01-09 3 views
0

のSchema.xmlを変更名前:A)
ドク3:(タグ:足の痛み、名:C)
Solrに問い合わせるには?</p> <p>ドク1個の:(タグ:頭の痛み、名:B)<br> ドク2個の:(タグ:胸の痛みと私は<strong>のApache Solrの</strong>は、下記のドキュメントの例のようなドキュメントが含まれている使用してい

私は "leg pain" を照会します..私は応答してすべての文書を取得しています。

正確な一致、つまり「足の痛み」の一致するドキュメントのみを取得する方法。 現時点ではフィールドタイプを次のように使用しています:文字列

スキーマファイルを変更する必要はありますか?

+1

あなたはsolrクエリを投稿できますか –

+1

フィールドのタイプは何ですか? _string_フィールドの場合、完全一致のみが返されます。あなたのクエリはどのように見えますか?ワイルドカードを使用していますか? – MatsLindh

答えて

0

leg pain Solrでlegを検索し、painを異なる単語として検索すると、デフォルトの演算子(OR)が検索されるためです。両方の単語を持つ文書は結果の中で一番上になります。

完全一致の場合は、PhraseQueryを使用してください。ダブルフレーズ"leg pain"この場合は、フレーズ全体がleg painのソルバー検索を使用してください。

+0

ありがとう私は知っていた..他の解決策はありますか?しかし、私が "痛み"だけを検索すると、私は応答の任意の文書を取得しません –

+0

solr管理分析ページでチェックしてください。ストップワードフィルタもチェックしてください。 – vinod

+0

私はstopwords.txtに次のように単語を追加しました:#I#have thethe ...しかし、stopwords.txtで与えられた停止語を除外しません。はストップワードファイルを提供してください –

0

完全一致のためには、これは、クエリに一致しなければならない条項の最小数を指定し、あなたのsolrconfig.xml で100%にクエリパーサのミリメートル(最小「万一」マッチ)パラメータを設定することができます。 また、リクエスト時にクエリ時にこのパラメータ(q.mm)を無効にすることもできます。

0

あなたが探しているのは、近接性によってコンテンツを高める別の関連性メカニズムです。 eDismaxを使用して、pfおよびpsパラメータを関連性Solr Wikiで説明されているように探しています。たとえば、タグと呼ばれるフィールドをクエリする場合、クエリは次のようになります。

http://localhost:8983/solr/<YOUR_COLLECTION>/select?defType=edismax&q=head pain&pf=tags&ps=10 

コメントに必要な結果が返されます。

クエリフレーズ内の単語との間に許可他の単語の数を設定

:特定のPS(フレーズ傾き)パラメータで 。ゼロの場合、これは完全なフレーズ検索です。 の値が大きい場合、これはWITHINまたはNEAR演算子のように機能します。実際には、スロープは 編集距離です。ここで、単位は クエリフレーズ内の用語の移動に対応します。

+0

何かを強調したい。 dismaxとedismaxの仕組み –

+0

@Naveens eDismaxは、より広範なクエリオプションを提供する拡張パーサーです。選択肢がある場合は、おそらく使用しているDefaultQueryParserにeDismaxを使用することをお勧めします。あなたが何かを強くしたくない場合でも、プロキシミティはあなたが探しているものを達成するために一般的に使用される関連メカニズムであり、提案されたソリューションはうまくいくでしょう。提供されたクエリを試してみると、これが当てはまるでしょう。 – AR1

0

あなたがSOLR verison 3を使用している場合は、次のフィールドタイプ

<fieldType name="input_general" class="solr.TextField"> 
    <analyzer type="index"> 
     <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="([^a-zA-Z0-9])" replacement="" replace="all" /> 
     <tokenizer class="solr.KeywordTokenizerFactory" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
    </analyzer> 
    <analyzer type="query"> 
     <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="([^a-zA-Z0-9])" replacement="" replace="all" /> 
     <tokenizer class="solr.KeywordTokenizerFactory" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
    </analyzer> 
</fieldType> 

を試してみて、あることを長期的なフィールドを変更することができます:だから

<field name="Tags" type="input_general" indexed="true" stored="true"/> 

、あなたが入力からスペースを削除しますそれはあなたが必要とするものを正確に返します:

Exact Match Search;あなたは試みることができますq = "legpain"

+0

この回答を複数の質問に貼り付ける必要はありません。実際に正確なヒットから正確さを取り除くためです。 – MatsLindh

+0

これはgudの解決策ではありません... –

+0

これはコピー/ペーストの回答ではなく、彼のシナリオに必要な答えと同じです。 –

関連する問題

 関連する問題