2017-02-16 56 views
1


Solr 6を使用して検索エンジンを実装しています。私が直面しています問題は...私は言葉を探したときに、私はカフェ9
それは私にこれを返すために探しています、それは最初のいくつかの他の結果を返し、実際のクエリは、例えば数6
であるということです
Solr検索で完全一致が返されない

  • NECOS NATURAL STORE & CAFE
  • SATTAR BUKSH CAFE
  • THE PINKキャデラックCAFE & RESTAURANT
  • CAFE ROCK LAHORE
  • CAFE CHEFザキール
  • CAFE 9


  • 私は何をしたいが、それは第一位にカフェ9を示すことがあり、その後、カフェ9などの他の結果は完全に一致..です



    私はすべてのインデックスを作成していますtext_generalタイプのフィールドとschema.xmlが添付されています。

    ありがとうございます。

     <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
     
         <analyzer type="index"> 
     
         <tokenizer class="solr.StandardTokenizerFactory"/> 
     
         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
     
         <!-- in this example, we will only use synonyms at query time 
     
         <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> 
     
         --> 
     
         <filter class="solr.ApostropheFilterFactory"/> 
     
         <filter class="solr.ShingleFilterFactory" maxShingleSize="5" outputUnigrams="true"/> 
     
         <filter class="solr.LowerCaseFilterFactory"/> 
     
         </analyzer> 
     
         <analyzer type="query"> 
     
         <tokenizer class="solr.StandardTokenizerFactory"/> 
     
         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
     
         <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     
         <filter class="solr.ApostropheFilterFactory"/> 
     
         <!-- <filter class="solr.ShingleFilterFactory" maxShingleSize="5" outputUnigrams="true"/> --> 
     
         <filter class="solr.LowerCaseFilterFactory"/> 
     
         </analyzer> 
     
        </fieldType>

    +0

    完全一致を検索する場合は、文字列をfieldTypeとして使用するか、キーワードtokenizerを使用してインデックスを作成できます。 –

    +0

    インデックスをどのようにクエリしていますか? dismax/edismaxを使用している場合は、フィールドに 'pf' /' pf2'ウェイトを適用してみてください。あなたは名前フィールドだけを照会していますか? – MatsLindh

    +0

    はい名前フィールドを照会しています。 localhost:8983/solr/abc/select?q = name :(カフェ9)...これは検索のための私のURLです。 –

    答えて

    2

    あなたが接近中のすべてのクエリ用語を含む文書のスコアを後押ししたいなら、あなたは、フィールド名の値をpfパラメータを渡すことができます。あなたの場合、pf=namepfはフレーズ欄を意味します)を渡す必要があります。 eDisMax query parserは、qパラメータ内のすべての用語の中からフレーズクエリを作成しようとしますが、フレーズフィールドのいずれかで正確なフレーズを見つけることができれば、特定のブーストをそのドキュメントの一致に適用します。

    デフォルトでeDisMaxクエリパーサーを使用していない場合は、q={!edismax pf=name}cafe 9を渡して現在のクエリに一時的に使用できます。

    また、生成されたフレーズ検索は、クエリ内bigramsは(つまり、すべての2期連続昇圧フレーズと見なされますされていることを除いてpfと同様に動作します(pf2=nameのように)pf2パラメータを渡すことができます)。もしそれがあなたが探しているものなら、pf3パラメータもあります。

    ブーストをカスタマイズし、複数のフィールド名をフレーズ近接パラメータ(たとえば、pf=name^2 title^3)に渡すこともできます。