如何查询Solr?并修改Schema.xml

时间:2017-01-09 17:23:23

标签: java solr solrj

我正在使用 Apache Solr 包含下面提到的Doc示例文档:

Doc 1 :(标签:头痛,姓名:B)
Doc 2 :(标签:胸痛,名字:A)
Doc 3 :(标签:腿痛,姓名:C)

当我查询“leg pain”时......我正在回复所有文件。

如何获得完全匹配,即只有“腿部疼痛”匹配文档。 截至目前,我正在使用字段Type:String

我是否需要在架构文件中进行任何更改?

4 个答案:

答案 0 :(得分:0)

这是因为当您搜索leg pain Solr搜索leg以及pain作为不同的字词时,默认运算符(OR)。具有两个单词的文档将在结果中排​​名第一。

要获得完全匹配,请使用PhraseQuery。在这种情况下,使用双引号"leg pain" solr搜索具有整个短语leg pain的文档。

答案 1 :(得分:0)

对于完全匹配,您可以在solrconfig.xml中将查询解析器的mm(最小"应该"匹配)参数设置为100% 这指定了查询中必须匹配的最小子句数。 或者您可以在请求

中的查询时覆盖此参数(q.mm)

答案 2 :(得分:0)

您正在寻找的是一种不同的相关机制,通过邻近来提升内容。使用eDismax,您正在寻找 pf ps 参数,如相关性Solr Wiki中所述。例如,如果您要查询名为tags的字段,则查询将如下所示:

http://localhost:8983/solr/<YOUR_COLLECTION>/select?defType=edismax&q=head pain&pf=tags&ps=10

将根据您的评论中的要求返回结果。 特别是ps(Phrase Slop)参数:

  

设置查询中单词之间允许的其他单词数   短语。如果为零,那么这是一个精确的短语搜索。对于更大   这个值就像一个WITHIN或NEAR运算符。事实上,这是一个污点   编辑距离,其中单位对应于中的术语移动   查询短语不在位置。

答案 3 :(得分:0)

如果您使用的是SOLR verison 3,则可以尝试以下字段类型

    <fieldType name="input_general" class="solr.TextField">
    <analyzer type="index">
        <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="([^a-zA-Z0-9])" replacement="" replace="all" />
        <tokenizer class="solr.KeywordTokenizerFactory" />
        <filter class="solr.LowerCaseFilterFactory" />
    </analyzer>
    <analyzer type="query">
        <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="([^a-zA-Z0-9])" replacement="" replace="all" />
        <tokenizer class="solr.KeywordTokenizerFactory" />
        <filter class="solr.LowerCaseFilterFactory" />
    </analyzer>
</fieldType>

将术语字段更改为:

<field name="Tags" type="input_general" indexed="true" stored="true"/>

因此,您将从输入本身中删除空格,它将返回您所需的内容:

Exact Match Search;你可以尝试q =标签:“legpain”