2017-01-09 40 views
0

我使用Apache Solr实现包含类似下面的实例文档文件:如何查询Solr?和修改Schema.xml的

文件1个:(标签:头胀痛,名称:B)
文件2个:(标签:胸痛,名称:A)
文件3:(标签:腿疼,名:C)

当我查询 “leg pain” ..我收到的所有文件响应。

如何获得精确匹配,即只有“腿痛”配套文件。 截至目前我使用的字段中键入如下:字符串

我是否需要在架构文件中的任何改变?

+1

你可以发布你solr查询 –

+1

究竟是什么类型的字段?如果它是_string_字段,则只会返回完全匹配。你的查询是什么样的?你在使用通配符吗? – MatsLindh

回答

0

这是因为默认操作符(OR)当您搜索leg pain Solr搜索legpain作为不同的单词。具有两个词的文档将在结果中位居前列。

对于精确匹配,使用PhraseQuery。在这种情况下使用双引号"leg pain"搜索具有全部短语leg pain的文档。

+0

谢谢我知道..是否有其他解决方案。但是当我只搜索“痛苦”时,我将不会收到任何文件回复 –

+0

检查solr管理员分析页面。还要检查停用词过滤器。 – vinod

+0

我在stopwords.txt中添加了以下单词:#I#have #the ...但它没有过滤stopwords.txt中给出的停用词怎么办?可以请提供stopword文件 –

0

对于精确匹配可以设置毫米(最小“应该”匹配)查询分析器100%的参数在solrconfig.xml中 此规定,必须在查询子句相匹配的最低数量。 或者您可以在请求时在查询时覆盖此参数(q.mm)

0

您正在寻找的是一种不同的相关机制,通过邻近度来增强内容。使用eDismax,你正在寻找PFPS作为相关Solr的Wiki解释参数。例如,如果你在查询一个域名为标签,您的查询看起来像:

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

在您的意见要求将返回结果。 特别PS(乐句边坡)参数:

设置的查询短语 单词之间允许的其他词的数量。如果为零,那么这是一个精确的词组搜索。对于较大的 值,它可以像WITHIN或NEAR运算符那样工作。事实上,slop是 的一个编辑距离,其中单位对应于 查询短语不在位置的条件移动。

+0

我想提升任何东西。以及dismax和edismax如何工作。 –

+0

@Naveens eDismax是一个扩展的解析器,它提供了一组更广泛的查询选项。如果您有选择,您更愿意使用eDismax而不是您可能使用的DefaultQueryParser。即使你不想提升任何东西,接近度也是一种常用的相关机制,以实现你所寻找的东西,并提出解决方案。尝试提供的查询,你会发现这是事实。 – AR1

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”

+0

没有必要将这个答案粘贴到多个问题中,因为它实际上是从精确匹配中删除准确性。 – MatsLindh

+0

这是不是gud解决方案... –

+0

这不是一个复制/粘贴的答案,这是他的场景需要相同的答案。 –