Solr q结果与数据库sql结果

时间:2011-12-15 15:36:50

标签: configuration solr

我正在尝试配置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'

1 个答案:

答案 0 :(得分:1)

一般来说,如果你想要像SQL一样的逐字匹配,你不应该使用分析的字段类型。例如,在默认架构中,未分析string字段类型(类solr.StrField)。

如果您迷失在分析过滤器和标记器中并且不太了解发生了什么,请尝试在Solr查询字符串中使用debugQuery = on或使用Solr analysis tool