【问题标题】:Solr and hyphenated numbersSolr 和连字符的数字
【发布时间】:2016-02-09 09:34:45
【问题描述】:

我有一个带有连字符的号码 91-21-22020-4。

我的问题是,即使连字符在数字字符串中移动,我也想要点击。因为现在 912122020-4 会一击而 91212202-04 不会?

调试信息如下:

"debug": {
"rawquerystring": "91212202-04",
"querystring": "91212202-04",
"parsedquery": "+((freetext:91212202 freetext:9121220204)/no_coord) +freetext:04",
"parsedquery_toString": "+(freetext:91212202 freetext:9121220204) +freetext:04",
"explain": {},
"QParser": "LuceneQParser",

"debug": {
"rawquerystring": "912122020-4",
"querystring": "912122020-4",
"parsedquery": "+((freetext:912122020 freetext:9121220204)/no_coord) +freetext:4",
"parsedquery_toString": "+(freetext:912122020 freetext:9121220204) +freetext:4",
"explain": {
  "ATEST003-81419": "\n0.33174315 = (MATCH) sum of:\n  0.17618936 = (MATCH) sum of:\n    0.17618936 = (MATCH) weight(freetext:9121220204 in 0) [DefaultSimilarity], result of:\n      0.17618936 = score(doc=0,freq=1.0), product of:\n        0.5690552 = queryWeight, product of:\n          3.3025851 = idf(docFreq=1, maxDocs=20)\n          0.17230599 = queryNorm\n        0.30961734 = fieldWeight in 0, product of:\n          1.0 = tf(freq=1.0), with freq of:\n            1.0 = termFreq=1.0\n          3.3025851 = idf(docFreq=1, maxDocs=20)\n          0.09375 = fieldNorm(doc=0)\n  0.15555379 = (MATCH) weight(freetext:4 in 0) [DefaultSimilarity], result of:\n    0.15555379 = score(doc=0,freq=2.0), product of:\n      0.44962177 = queryWeight, product of:\n        2.609438 = idf(docFreq=3, maxDocs=20)\n        0.17230599 = queryNorm\n      0.34596586 = fieldWeight in 0, product of:\n        1.4142135 = tf(freq=2.0), with freq of:\n          2.0 = termFreq=2.0\n        2.609438 = idf(docFreq=3, maxDocs=20)\n        0.09375 = fieldNorm(doc=0)\n"
},

我的 schema.xml 看起来像:

<fieldType name="text_indexed" class="solr.TextField">
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.HyphenatedWordsFilterFactory"/>
            <filter class="solr.WordDelimiterFilterFactory" catenateNumbers="1" catenateAll="0"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-index.txt"/>
            <filter class="solr.ReversedWildcardFilterFactory" withOriginal="true" maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.WordDelimiterFilterFactory" catenateNumbers="1" catenateAll="0"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-index.txt"/>
        </analyzer>
    </fieldType>

【问题讨论】:

    标签: solr hyphen


    【解决方案1】:

    使用PatternReplaceCharFilter 删除连字符的所有痕迹,然后再将它们编入 Solr 索引(或使用 PatternReplaceFilter 更改存储的标记而不是索引的文本)。

    91212202-04 然后将被索引(和搜索)为9121220204,这将有效地消除对连字符的任何依赖。

    【讨论】:

    • 但是当我运行分析 9121220204 已经被索引和搜索?我就是不明白为什么连字符的位置对搜索结果很重要?
    • 好吧,查询末尾的 "+freetext:4" 要求匹配一个只有 4 或 04 的标记 - 这使得一个命中而另一个不命中。使用“分析”页面查看每个步骤中的转换。在进一步调试之前删除不需要的过滤器也是一个好主意(您有一个连字符过滤器、一个mappingcharfilter 一个可能会更改输入的worddelimiterfilter)。
    • 好的, 成功了..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 2023-03-15
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多