Solr用数字索引短连字符

时间:2019-10-10 19:43:59

标签: solr

我已经在堆栈溢出中搜索了此问题,但没有一个解决特定模式的字母-连字符号,这似乎是Solr遇到问题的特定情况。

我们提供的产品带有短连字符的字母数字单词,需要在Solr中进行索引并可以搜索。例如,标题为“ aimpoint t-2”的产品。用户应该能够查询“ t-2”或“ aimpoint t-2”以获得结果。

我尝试了所有可能的令牌生成器和过滤器组合,但无法完成此操作,希望这是我错过的简单操作。

schema.xml(Solr 6.5)的相关部分:

<field name="product_name" type="text_en" indexed="true" stored="true" multiValued="false" />

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            <tokenizer class="solr.ClassicTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.WordDelimiterGraphFilterFactory" preserveOriginal="1"/>
            <filter class="solr.FlattenGraphFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.ClassicTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.WordDelimiterGraphFilterFactory" preserveOriginal="1"/>
        </analyzer>
    </fieldType>

预先感谢

更新1:

每个MatsLindh答案我有以下更新的schema.xml

<fieldType name="text_en" class="solr.TextField">
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        </analyzer>
    </fieldType>

这是分析选项卡的输出: enter image description here

这是调试查询数据:

https://gist.githubusercontent.com/jordotech/d73fecfe6e6c0ee8c2177ea2bd9d5ff2/raw/6969686eef7a43f2072849138a7178b41692e6a8/query_debug.json

这与调试json的这一部分有关吗?

"parsedquery":"+(+SynonymQuery(Synonym(text:t text:t2)) +text:2)",
    "parsedquery_toString":"+(+Synonym(text:t text:t2) +text:2)",

似乎要删除连字符

1 个答案:

答案 0 :(得分:1)

Solr在索引编制过程中没有关于-的任何特殊问题-任何处理将由令牌生成器和过滤器中的规则确定,并且您可以使用Solr管理员中的Analysis标签界面,以查看整个链中每个步骤的文本处理方式。

您将需要一个WhitespaceTokenizer仅在上拆分(而不是-StandardTokenizer将拆分的ClassicTokenizer。经典令牌生成器应该不理会t-2,但是您的下一个步骤将不会)。

除非您想进一步分割WordDelimiterGraphFilterFactory,否则您还将删除t(即,如果您需要仅搜索t-2而不是t-2的话。

根据单词定界符图形过滤器的描述:

  

非字母数字字符(已舍弃):“热点”->“热点”,“热点”

..如果要将该令牌保留为WITH main_query AS ( SELECT id_socio, nome, nif, num_mecanografico, IFNULL( (SELECT quota_nova FROM QUOTAS_TEMPORARIAS temp_quota WHERE id_socio = temp_quota.id_socio AND ANO = 2019 AND MES = 10), quota) quota FROM SOCIO socio, TIPO_PAGAMENTO tipo_pag, AGRUPAMENTO agrup, ORGANIZACAO org WHERE socio.ID_TIPO_PAGAMENTO = tipo_pag.ID_TIPO_PAGAMENTO AND socio.id_agrupamento = agrup.id_agrupamento AND agrup.id_organizacao = o.id_organizacao AND org.id_organizacao = 1 AND socio.id_tipo_pagamento = 1 ) SELECT * FROM main_query UNION SELECT NULL, NULL, NULL, NULL, SUM(quota) FROM main_query GROUP BY id_socio WITH ROLLUP HAVING nome IS NOT NULL AND nif IS NOT NULL AND num_mecanografico IS NOT NULL OR id_socio IS NULL ,则不是您想要的。