Solr:使用短语搜索以特殊字符搜索

时间:2013-04-10 10:24:12

标签: solr query-parser

我们需要像

那样进行Solr搜索
"Success & Failure"
"Working 50%"

但Solr查询解析器会从搜索中删除所有特殊字符,但是如果我向其添加转义序列。

我的搜索查询如下所述

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

下面是debugQuery for it。

<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>

我已经在网上搜索了这个,我得到的结果是应该将特殊字符编入索引以使其正常工作,因为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>

althohg这样做,它不会在搜索词中解析&

我们想要,solr应该搜索“成功与失败”,并且不应该消除特殊性格。

任何人都有任何想法,怎么做?

1 个答案:

答案 0 :(得分:1)

您应该考虑使用solr.WhitespaceTokenizerFactory而不是solr.StandardTokenizerFactory,因为StandardTokenizer会将特殊字符用作单词边界。在这种情况下,您需要开始思考何时将文本拆分为单词。

此外,您使用的WordDelimiterFilterFactory可能会过滤掉此字符。为了防止它这样做,你应该能够定义&amp;根据此问题“How do I find documents containing digits and dollar signs in Solr?”在您的类型定义中作为ALPHA。

该定义是在solr.WordDelimiterFilterFactory声明中由 types =“wdfftypes.txt”表示的文件中给出的。

  

&安培; =&GT; ALPHA

进一步阅读如何编制此文件