我的solr配置如下:
`
<lst name="defaults">
<str name="defType">dismax</str>
<str name="q.alt">*:*</str>
<str name="qf">
city^10.0 name^10.0 city_l10n_value^10.0 name_l10n_value^10.0 state^5.0 country^2.0
</str>
<str name="sort">hotel_count desc,query({!v="type:(airport OR train_station)"}) desc ,score desc</str>
<str name="tie">0.1</str>
<str name="echoParams">explicit</str>
<int name="rows">100</int>
</lst>
`
我正在使用的架构是:
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LengthFilterFactory" min="2" max="100"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="German2" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LengthFilterFactory" min="2" max="100"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="German2" />
</analyzer>
</fieldType>
<field name="type" type="text_general" indexed="true" stored="true"/>
......
现在,在索引搜索结果后,如下所示:
<result name="response" numFound="114" start="0">
<doc><str name="type">airport</str></doc>
<doc><str name="type">train_station</str></doc>
<doc><str name="type">tourist_feature</str></doc>
<doc><str name="type">company_location</str></doc>
<doc><str name="type">company_location</str></doc>
<doc><str name="type">company_location</str></doc>
<doc><str name="type">company_location</str></doc>
<doc><str name="type">company_location</str></doc>
不幸的是,如果我运行查询查询,
http://localhost:8983/solr/maincore/select/?fq=type:company_location,
它不会返回任何内容。
http://localhost:8983/solr/maincore/select/?fq=type:tourist_feature
会返回一些匹配。
这是什么,我做错了什么?
答案 0 :(得分:3)
对于过滤器查询,您应该使用非标记化字段。
http://wiki.apache.org/solr/SolrFacetingOverview
因为分面字段通常被指定用于两个目的, 人类可读的文本和深入查询值,它们经常出现 索引与用于搜索和排序的字段不同:
- 它们通常不会被标记为单独的词语
- 它们通常不会映射到小写
- 通常不会删除人类可读的标点符号(双引号除外)
- 通常不需要存储它们,因为存储的值看起来很像索引值,并且分面机制用于值检索。