Solr搜索查询不考虑特殊字符

时间:2014-05-06 18:44:05

标签: solr

我已在solr商店名称中编入索引,例如

H&M
Lotte & Anna
fan & more
Tele2
Pure Tea

我有以下两个问题(优先级重要)

  1. 如果我搜索“H& M”,我将永远不会得到任何结果。如果我搜索“te& Ann”,我会得到预期的结果。

  2. 如果我搜索“te& an”,我得到的结果是Tele2和Pure Tea,而我希望“Lotte& Anna”首先出现在列表中。

  3. 好像&不考虑性格。我在这里做错了什么?

    这些是我对特定字段(查询和索引)的分析器

    <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.StandardFilterFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.StandardFilterFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
    </fieldType>
    

    好的,第一个问题是WordDelimiterFilterFactory& => ALPHA中指定wdfftypes.txt并更改从StandardTokenizerFactory切换到WhitepsaceTokenizerFactory

    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.WordDelimiterFilterFactory" types="wdfftypes.txt"/>
    

    (在分析器和查询中编辑)。

    第二个问题仍然存在。 在debugQuery中,我得到以下内容

    "debug": {
        "rawquerystring": "te & an",
        "querystring": "te & an",
        "parsedquery": "text:te text:an",
        "parsedquery_toString": "text:te text:an",
        "explain": {
          "": "\n0.8152958 = (MATCH) product of:\n  1.6305916 = (MATCH) sum of:\n    1.6305916 = (MATCH) weight(text:te in 498) [DefaultSimilarity], result of:\n      1.6305916 = score(doc=498,freq=1.0 = termFreq=1.0\n), product of:\n        0.8202942 = queryWeight, product of:\n          5.300835 = idf(docFreq=87, maxDocs=6491)\n          0.15474811 = queryNorm\n        1.9878132 = fieldWeight in 498, product of:\n          1.0 = tf(freq=1.0), with freq of:\n            1.0 = termFreq=1.0\n          5.300835 = idf(docFreq=87, maxDocs=6491)\n          0.375 = fieldNorm(doc=498)\n  0.5 = coord(1/2)\n"
        },
    

    那么,我应该修改什么才能使权重转移到所需的结果?

1 个答案:

答案 0 :(得分:2)

使用&#34; NGramFilterFactory&#34;而不是&#34; EdgeNGramFilterFactory&#34;。这样,&#34;乐天&amp; Anne&#34;,被索引到&#34; lo,ot,tt,te,lot,ott,tte,lott,otte,lotte&#34;和&#34; an,nn,ne,ann,nne,anne&#34;。所以当你搜索&#34; tte&amp; ann&#34;,文件将匹配。