0

尝试运行以下搜索时,我一定做错了什么

http://localhost:8983/solr/collection1/select?q=url:www.abc.com&wt=xml&indent=true

它不是给这个网站的结果,它是给所有的东西。schema.xml 在如何设置 url 方面非常普通。

<fieldType name="text" class="solr.TextField"
        positionIncrementGap="100">
        <analyzer>
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.StopFilterFactory"
                ignoreCase="true" words="stopwords.txt"/>
            <filter class="solr.WordDelimiterFilterFactory"
                generateWordParts="1" generateNumberParts="1"
                catenateWords="1" catenateNumbers="1" catenateAll="0"
                splitOnCaseChange="1"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.PorterStemFilterFactory"/>
            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        </analyzer>
    </fieldType>

<fieldType name="url" class="solr.TextField"
        positionIncrementGap="100">
        <analyzer>
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.WordDelimiterFilterFactory"
                generateWordParts="1" generateNumberParts="1"/>
        </analyzer>
    </fieldType>

如果我使用主机:www.abc.com,它可以工作。

为什么使用 url 字段时结果看似不正确?

感谢您的任何帮助。

4

2 回答 2

1

假设您使用的是 Solr 3.1 或更高版本。

StandardTokenizerFactory - 它根据字边界规则创建标记。这意味着 URL 将被分解为多个标记,并且匹配其中任何一个都将被视为命中。

尝试使用KeywordTokenizerFactory,作为您的url字段类型。这应该保留完整的 URL 并仅匹配它。

于 2013-08-08T01:19:08.010 回答
0

除了使用 KeywordTokenizerFactory,您还必须删除 WordDelimiterFilterFactory。WDF 在标点符号和其他分隔符上拆分标记……这在 URL 中非常丰富。在进行更改并重新启动 Solr 或重新加载核心后,您必须重建索引。

另一个想法,如果您不需要强制 URL 小写:从 TextField 切换到 StrField 并完全摆脱分析器配置。

于 2013-08-08T20:23:22.787 回答