我是SOLR的新手,这是我在此列表中的第一篇文章。 我已经在这个问题上工作了几天。我尝试了在谷歌找到的所有东西,但看起来我错过了什么。
这是我的问题: 我有一个名为DBASE_LOCAT_NM_TEXT的字段它包含如下值:CRD_PROD目标是能够通过将精确字符串“CRD_PROD”或其中一部分(由“_”标记)来搜索此字段,如“CRD”或“PROD” “
目前: 此查询返回结果:q = DBASE_LOCAT_NM_TEXT:CRD_PROD但这不是:q = DBASE_LOCAT_NM_TEXT:CRD我想了解为什么第二个查询不返回任何结果
以下是我配置字段的方式:
<field name="DBASE_LOCAT_NM_TEXT" type="text_general" indexed="true" stored="true" required="false" multiValued="false"/>
以下是我配置字段类型的方法:
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<filter class="solr.WordDelimiterFilterFactory" preserveOriginal="1" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<filter class="solr.WordDelimiterFilterFactory" preserveOriginal="1" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
我也在SOLR管理控制台中使用分析面板。它显示了这个: WT CRD_PROD
WDF CRD_PROD CRD PROD CRDPROD
SF CRD_PROD CRD PROD CRDPROD
LCF crd_prod CRD 刺 crdprod
SKMF crd_prod CRD 刺 crdprod
RDTF crd_prod CRD 刺 crdprod
我不确定它是否相关,但是这个索引是使用Lucene接口的Java程序创建的。它使用StandardAnalyzer进行写入,并将字段配置为标记化,索引和存储。这会影响SOLR配置吗?
你能帮我理解我错过了什么以及如何调试吗?
谢谢, Yetkin
答案 0 :(得分:0)
那么,这个索引没有Solr索引呢?它是在一个完全独立的应用程序中创建的?
在这种情况下,您的&#34;索引&#34;分析仪与它无关,因为它从未被使用过。通常,您应该在索引和查询时使用相同的分析器设置。有一些例外情况,但除非你有良好的原因,否则坚持这一点。如果使用StandardAnalyzer
对字段编制索引,则只需:
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer class="org.apache.lucene.analysis.standard.StandardAnalyzer"/>
</fieldtype>
但是,不确定为什么你没有得到比赛。索引是用旧版本的lucene构建的吗?它听起来就是这样,所以它创建的版本也可能是一个问题。