【问题标题】:Solr - cant query special characters or numbersSolr - 无法查询特殊字符或数字
【发布时间】:2013-10-12 13:45:56
【问题描述】:

在 solr 字段 PackageTag 中

<field name="PackageTag" type="text_en_splitting" indexed="true" stored="true" required="false" multiValued="true"/>

我有以下值

"playing @@*"

现在我正在寻找“玩”,我在结果中得到了它。
但是当我用@@* 搜索时,我没有。 在单词分隔符中省略。

有没有办法让用户搜索它的特殊字符但仍然使用单词分隔?

【问题讨论】:

    标签: solr


    【解决方案1】:

    这里有两个问题:

    • 首先,您必须在 Solr 中创建自己的 fieldType 并将其配置为 NOT 用户“@”和“*”作为 stopWords:

    在 schema.xml 中做这样的事情:

    <types>
            <fieldType name="myTextFieldType" class="solr.TextField" positionIncrementGap="100">
                <analyzer type="index">
                    <tokenizer class="solr.StandardTokenizerFactory" />
                    <filter class="solr.StopFilterFactory" ignoreCase="true"
                        words="stopwords.txt" enablePositionIncrements="true" />
                </analyzer>
                <analyzer type="query">
                    <tokenizer class="solr.StandardTokenizerFactory" />             
                    <filter class="solr.StopFilterFactory" ignoreCase="true"
                        words="stopwords.txt" enablePositionIncrements="true" />
                </analyzer>
            </fieldType>
            </types>
    

    然后您必须将该 fieldType 用于“PackageTag”字段:

    <field name="PackageTag" type="text_en_splitting"
    
    • 然后,在“conf”目录(schema.xml 所在的同一目录)中,创建或编辑 stopwords.txt 文件,并在其中添加“@”和“*”。把它们放在那里,每个字符在一行:

      @

      *

    现在,由于“*”字符也是 Lucene 查询(通配符)的特殊字符,因此您需要在查询中对其进行转义。您可以通过将“*”替换为“\*”来转义它。像这样的:

    PackageTag:bla\*
    

    搜索包含“bla*”的字段。

    【讨论】:

      【解决方案2】:

      我不记得 Lucene 特殊字符的列表,但是您是否尝试在字符前使用 \(反斜杠)转义?

      如果这不起作用,您可能需要查看用于索引字段的AnalyzerStandardAnalyzer 可能会用你的特殊字符做一些有趣的事情,所以你可以考虑另一个分析器或自己动手。

      【讨论】:

      【解决方案3】:

      您必须在 protwords.txt 文件中添加单词分隔符,然后应用在索引和查询时使用原始词的过滤器。 (例如 solr.WordDelimiterFilterFactoryprotected="protwords.txt" 参数)。

      通过这种方式,它们将被标记为您想要的,并且不会在查询期间被删除。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-16
        • 1970-01-01
        • 2011-05-30
        • 2014-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多