2017-01-22 12 views
0

私はapachesolrで検索の問題があります。Apache solr検索の問題

たとえば iに対してインデックスを付けてきた内容は以下のとおりです。

  • ティラミスドールのhiverの
  • Veloutéドールのhiverの
  • ミネストローネドールのhiverののcrémeux、
  • スムージーのバージョンhiverの

"hiver"を検索すると、結果としてスムージーバージョンのハワイしか得られません。

私はdhiver検索する場合

  • ティラミスD'hiverの
  • Veloutéドールのhiverのは
  • ミネストローネドールのhiverの結果として、私が手に私はすべての結果を取得する必要があり

をcrémeux私がハワイやダイバー、またはダイバーを検索するかどうか

何が問題なのでしょうか? schema.xmlで何かを変更する必要がありますか?

TextFieldに私のスキーマは次のとおりです。

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords.txt" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" 
      generateWordParts="1" 
      generateNumberParts="1" 
      catenateWords="1" 
      catenateNumbers="1" 
      catenateAll="0" 
      splitOnCaseChange="1" 
      splitOnNumerics="1" 
      preserveOriginal="1" 
    /> 
    <filter class="solr.LengthFilterFactory" min="3" max="100" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.ShingleFilterFactory" minShingleSize="2" maxShingleSize="5"/> 
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/> 
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
    </analyzer> 

    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords.txt" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" 
      generateWordParts="1" 
      generateNumberParts="1" 
      catenateWords="1" 
      catenateNumbers="0" 
      catenateAll="0" 
      splitOnCaseChange="1" 
      splitOnNumerics="1" 
    /> 
    <filter class="solr.LengthFilterFactory" min="3" max="100" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/> 
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 

    </analyzer> 

    <analyzer type="multiterm"> 
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords.txt" 
      /> 
    <filter class="solr.WordDelimiterFilterFactory" 
      protected="protwords.txt" 
      generateWordParts="1" 
      generateNumberParts="1" 
      catenateWords="0" 
      catenateNumbers="0" 
      catenateAll="0" 
      splitOnCaseChange="1" 
      preserveOriginal="1"/> 
    <filter class="solr.LengthFilterFactory" min="2" max="100" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> 
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
    </analyzer> 
</fieldType> 

答えて

1

うーんおいしいです。

最初のポイントは、これらの種類の問題すべてについて、Solr Analysisツールを使用することです。あなたの友人です。第2に、Solrは、クエリーとタームが同一の文字に対して100%の文字である場合にのみ一致します。

<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" /> 

Veloutéドールのhiverのは

velouteとして分析される次のフィルタについては

| | d | dhiver | hiver

これはhiverのためのあなたの照会に一致します - あなたは| d |私のフィルタが生成したトークン。

アクセント記号をどこかに折り畳むことを忘れないでください。

関連する問題