我正在尝试配置solr来索引oracle数据库。我在schema.xml
中启用了前导通配符搜索和各种其他过滤器<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
<filter class="solr.ReversedWildcardFilterFactory" withOriginal="true"
maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
我索引了数据库中的所有可搜索列,并使用与solr字段的列名相同的名称,因此我在db-data-config.xml中的select查询只是select * from view;
我们收到来自solr和数据库查询的不同结果
例如,如下的sql查询返回1307条记录
select count(*) from VIEW
where (COLUMN1 = 'Value0' and COLUMN2='Value1')
OR COLUMN3 in ('Value2','Value3','Value4')
AND COLUMN4='Value5'
并且如下所示的solr查询仅返回7
(COLUMN1:(Value0) AND COLUMN2:(Value1))
OR (COLUMN3:(Value2 OR Value3 OR Value4))
AND (COLUMN4:(Value5))
我们只对1个视图进行操作,该视图包含所有相关数据。 solr配置索引视图中的所有列,我认为结果将类似。有人可以解释这种差异吗?
编辑
按要求添加值:solr query
COUNTRY_NAME:(United States) AND ELEMENT_CODE:(CT)) OR (UNIT_STATUS:(Operating OR Order OR Shipped)) AND (FRAME_GR_DISPLAY:(06A))
数据库查询
select * from VIEW where
(COUNTRY_NAME = 'United States' AND ELEMENT_CODE='CT')
OR UNIT_STATUS in ('Operating','Order','Shipped')
AND FRAME_GR_DISPLAY='06A'
答案 0 :(得分:1)
一般来说,如果你想要像SQL一样的逐字匹配,你不应该使用分析的字段类型。例如,在默认架构中,未分析string
字段类型(类solr.StrField)。
如果您迷失在分析过滤器和标记器中并且不太了解发生了什么,请尝试在Solr查询字符串中使用debugQuery = on或使用Solr analysis tool。