我使用Apache Solr实现包含类似下面的实例文档文件:如何查询Solr?和修改Schema.xml的
文件1个:(标签:头胀痛,名称:B)
文件2个:(标签:胸痛,名称:A)
文件3:(标签:腿疼,名:C)
当我查询 “leg pain
” ..我收到的所有文件响应。
如何获得精确匹配,即只有“腿痛”配套文件。 截至目前我使用的字段中键入如下:字符串
我是否需要在架构文件中的任何改变?
我使用Apache Solr实现包含类似下面的实例文档文件:如何查询Solr?和修改Schema.xml的
文件1个:(标签:头胀痛,名称:B)
文件2个:(标签:胸痛,名称:A)
文件3:(标签:腿疼,名:C)
当我查询 “leg pain
” ..我收到的所有文件响应。
如何获得精确匹配,即只有“腿痛”配套文件。 截至目前我使用的字段中键入如下:字符串
我是否需要在架构文件中的任何改变?
这是因为默认操作符(OR)当您搜索leg pain
Solr搜索leg
和pain
作为不同的单词。具有两个词的文档将在结果中位居前列。
对于精确匹配,使用PhraseQuery。在这种情况下使用双引号"leg pain"
搜索具有全部短语leg pain
的文档。
谢谢我知道..是否有其他解决方案。但是当我只搜索“痛苦”时,我将不会收到任何文件回复 –
检查solr管理员分析页面。还要检查停用词过滤器。 – vinod
我在stopwords.txt中添加了以下单词:#I#have #the ...但它没有过滤stopwords.txt中给出的停用词怎么办?可以请提供stopword文件 –
对于精确匹配可以设置毫米(最小“应该”匹配)查询分析器100%的参数在solrconfig.xml中 此规定,必须在查询子句相匹配的最低数量。 或者您可以在请求时在查询时覆盖此参数(q.mm)
您正在寻找的是一种不同的相关机制,通过邻近度来增强内容。使用eDismax,你正在寻找PF和PS作为相关Solr的Wiki解释参数。例如,如果你在查询一个域名为标签,您的查询看起来像:
http://localhost:8983/solr/<YOUR_COLLECTION>/select?defType=edismax&q=head pain&pf=tags&ps=10
在您的意见要求将返回结果。 特别PS(乐句边坡)参数:
设置的查询短语 单词之间允许的其他词的数量。如果为零,那么这是一个精确的词组搜索。对于较大的 值,它可以像WITHIN或NEAR运算符那样工作。事实上,slop是 的一个编辑距离,其中单位对应于 查询短语不在位置的条件移动。
我想提升任何东西。以及dismax和edismax如何工作。 –
@Naveens eDismax是一个扩展的解析器,它提供了一组更广泛的查询选项。如果您有选择,您更愿意使用eDismax而不是您可能使用的DefaultQueryParser。即使你不想提升任何东西,接近度也是一种常用的相关机制,以实现你所寻找的东西,并提出解决方案。尝试提供的查询,你会发现这是事实。 – AR1
如果您正在使用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”
没有必要将这个答案粘贴到多个问题中,因为它实际上是从精确匹配中删除准确性。 – MatsLindh
这是不是gud解决方案... –
这不是一个复制/粘贴的答案,这是他的场景需要相同的答案。 –
你可以发布你solr查询 –
究竟是什么类型的字段?如果它是_string_字段,则只会返回完全匹配。你的查询是什么样的?你在使用通配符吗? – MatsLindh