在solr中搜索URL的结果不正确

时间:2013-08-07 23:12:46

标签: url solr nutch

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

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字段时看似不正确的结果?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

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

StandardTokenizerFactory - 它基于Word Boundary rules创建令牌。这意味着URL将被分解为多个令牌,并且其中任何一个上的匹配都将被视为命中。

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

答案 1 :(得分:0)

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

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