0

Solr Search を次のようにする必要があります

"Success & Failure"
"Working 50%"

ただし、エスケープシーケンスを追加すると、Solrクエリパーサーはすべての特殊文字を検索から除外します。

私の検索クエリは以下のとおりです

http://localhost:8080/solr/core0/select?q=%22Success%20\%26%20Failure%22&debugQuery=on

以下はそのためのdebugQueryです。

<lst name="debug">
   <str name="rawquerystring">"Success & Failure"</str>
   <str name="querystring">Success & Failure"</str>
   <str name="parsedquery">PhraseQuery(text:"success failure")</str>
   <str name="parsedquery_toString">text:"success failure"</str>
   <lst name="explain"/>
    <str name="QParser">LuceneQParser</str>
    <lst name="timing"></lst>
 </lst>

これをWebで検索したところ、solrはデフォルトで特殊文字にインデックスを付けないため、機能させるには特殊文字にインデックスを付ける必要があるという結果が得られました。

solr.WordDelimiterFilterFactoryそうするために、TextField定義に追加しました

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
     <!--   <charFilter class="solr.MappingCharFilterFactory" mapping="char-mapping.txt"/>-->
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.WordDelimiterFilterFactory"
                splitOnCaseChange="0"
                splitOnNumerics="0"
                stemEnglishPossessive="0"
                generateWordParts="0"
                generateNumberParts="0"
                catenateWords="0"
                catenateNumbers="0"
                catenateAll="0"
                preserveOriginal="1"
                types="wdfftypes.txt"
                />
       <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="false" />
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.WordDelimiterFilterFactory"
                splitOnCaseChange="0"
                splitOnNumerics="0"
                stemEnglishPossessive="0"
                generateWordParts="0"
                generateNumberParts="0"
                catenateWords="0"
                catenateNumbers="0"
                catenateAll="0"
                preserveOriginal="1"
                types="wdfftypes.txt"
                />
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="false" />
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

そうしても、&検索語で解析されません。

作成したいのは、solr が「成功と失敗」で検索する必要があり、特殊文字を削除しないようにすることです。

誰もがこれを行う方法を知っていますか??

4

1 に答える 1

1

StandardTokenizer は単語境界として特殊文字を使用するため、solr.StandardTokenizerFactory の代わりに solr.WhitespaceTokenizerFactory の使用を検討する必要があります。この場合、テキストをいつ単語に分割するかを考え始める必要があります。

さらに、使用している WordDelimiterFilterFactory は、この文字を除外する場合があります。そうならないようにするには、この質問「Solr で数字とドル記号を含むドキュメントを見つけるにはどうすればよいですか?」に従って、型定義で & を ALPHA として定義できる必要があります。

その定義は、solr.WordDelimiterFilterFactory の宣言でtypes="wdfftypes.txt"で示されるファイルに指定されているものです。

& => アルファ

このファイルをどのように作成する必要があるかについての詳細情報

于 2013-04-12T06:27:27.243 に答える