2017-11-13 7 views
0

に一致する部分と接頭語を行うためのSolrを構成する方法、検索:セント・ポイント例えば

  • センターポイント
  • 中心点
  • 試合

    1. パーセント・ポイントでなければなりません

      "point cent"と一致する必要はありません。

      私はsolr6.0でNGramFilterFactoryを使用しようとしていますが、常に一致順が逆転した結果が得られます。このような :

      <analyzer type="index"> 
          <tokenizer class="solr.StandardTokenizerFactory"/> 
          <filter class="solr.LowerCaseFilterFactory"/> 
          <filter class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="25"/> 
          </analyzer> 
          <analyzer type="query"> 
          <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
          <filter class="solr.LowerCaseFilterFactory"/> 
      

      私がスペースを置き換えるためにPatternReplaceFilterFactoryを使用するようにしてください* .But、それはだのみ、それを文字列として一致し、動作しませんでした。

    +0

    を助けるかもしれませんか?探しているフィールドでsolr.ReversedWildcardFilterFactoryを有効にしてから、EdgeNgramFilterFactoryを取得したようです。 – sdwaraki

    +0

    私はReversedWildcardFilterFactoryを使用していません。私はStandardTokenizerFactoryが各単語にマッチし、order.But気にしないと思う私はそれを処理する方法を知らない –

    答えて

    0

    あなただけのプレフィックスを一致させたいので、あなたがNGramFilterを使用せずに、あなたが望むものを達成することができます:

    <analyzer> 
        <tokenizer class="solr.KeywordTokenizerFactory"/> 
        <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    

    ...と、クエリ、ワイルドカード使用:KeywordTokenizerを保つので

    field:cent* 
    

    を(小文字のフィルタはワイルドカード検索を実行するときにも機能します)、各値(それはngramfilterと同じ)に多数のトークンをインデックスする必要はありません値の接頭辞だけを気にしてください。

    正確な一致が高くなった場合の2番目の要件では、空白トークナイザと小文字フィルタだけをngramフィルタなしでより単純なフィールド定義に照会します。返されたドキュメントのプレフィックスクエリをクエリとして使用し、他のフィールドをブーストクエリとして使用できます。

    #2と#3の違いのルールによっては、あなたが望む注文を得るためにブーストクエリを微調整する必要があります。

    +0

    私はqfの複数のフィールドを使用するので、検索文字列を変更することはできません。私はPatternReplaceFilterFactoryを使用して、スペースを*に置き換えようとします。しかし、それはうまくいかず、文字列としてのみ一致します。 –

    0

    1)セント点

    2)センターポイント

    3)中心が1と3を解決し、重要なものとして位置を保つために

    ポイント、私はフレーズクエリとエッジを使用することをお勧めNGRAMインデックス時間分析:

    • 検索: "セント・ポイント"

    <fieldType name="text_autocomplete" class="solr.TextField"> 
     
          <analyzer type="index"> 
     
           <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/> 
     
           <tokenizer class="solr.StandardTokenizerFactory"/> 
     
           <filter class="solr.WordDelimiterFilterFactory" 
     
             generateWordParts="1" generateNumberParts="1" catenateWords="0" 
     
             catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> 
     
           <filter class="solr.LowerCaseFilterFactory"/> 
     
           <filter class="solr.EdgeNGramFilterFactory" maxGramSize="20" minGramSize="2"/> 
     
          </analyzer> 
     
          <analyzer type="query"> 
     
           <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/> 
     
           <tokenizer class="solr.StandardTokenizerFactory"/> 
     
           <filter class="solr.WordDelimiterFilterFactory" 
     
             generateWordParts="1" generateNumberParts="1" catenateWords="0" 
     
             catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> 
     
           <filter class="solr.LowerCaseFilterFactory"/> 
     
          </analyzer> 
     
         </fieldType>

    ポイント2のためにあなたはSolrのは、それが2つのワードで構成されて知らないインデックス中の化合物のトークンを持っているとして、それはより困難です。

    あなたはこのスペルチェッカに見て取ることができる[1]、それはスキーマであなたのトークナイザは、外見は何

    [1] https://lucene.apache.org/solr/guide/6_6/spell-checking.html#SpellChecking-WordBreakSolrSpellChecker