我索引了一个小集合(大约 150k 个文档)。我让用户能够使用下拉框进行过滤查询。“字段查询”字段是:apo_taxonomy、apo_dik、apo_number 和 apo_date。下面是 schema.xml 的一部分:
<fieldType name="text_efe_dioi_s" class="solr.TextField" positionIncrementGap="100" >
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LimitTokenCountFilterFactory" maxTokenCount="20"/>
<filter class="solr.GreekLowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LimitTokenCountFilterFactory" maxTokenCount="20"/>
<filter class="solr.GreekLowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="text_efe_dioi" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.GreekLowerCaseFilterFactory"/>
<filter class="solr.GreekStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.GreekLowerCaseFilterFactory"/>
<filter class="solr.GreekStemFilterFactory"/>
</analyzer>
</fieldType>
<fields>
<field name="ida" type="string" indexed="true" stored="true" multiValued="false"/>
<field name="solr_id" type="string" indexed="true" stored="true" multiValued="false"/>
<field name="apo_number" type=" text_efe_dioi " indexed="true" stored="true" multiValued="true"/>
<field name="apofasi_date" type=" text_efe_dioi " indexed="true" stored="true"/>
<field name="apo_dik" type=" text_efe_dioi " indexed="true" stored="true"/>
<field name="apo_taxonomy" type=" text_efe_dioi " indexed="true" stored="true"/>
<field name="content" type=" text_efe_dioi " indexed="true" stored="true" multiValued="true"/>
<field name="type" type="string" indexed="true" stored="true"/>
<field name="model" type="string" indexed="true" stored="true" multiValued="false"/>
<field name="url" type="string" indexed="true" stored="true"/>
<field name="search_tag" type=" text_efe_dioi " indexed="true" stored="true"/>
<field name="contentbin" type="text" indexed="true" stored="true" multiValued="true"/>
<field name="last_modified" type="string" indexed="true" stored="true"/>
<field name="title" type=" text_efe_dioi " indexed="true" stored="true" multiValued="true"/>
<field name="grid_title" type=" text_efe_dioi " indexed="true" stored="true"/>
<field name="contentS" type=" text_efe_dioi _s" indexed="true" stored="true"/>
</fields>
<copyField source="apo_number" dest="content" />
<copyField source="apo_date" dest="content" />
<copyField source="apo_dik" dest="content" />
<copyField source="apo_taxonomy" dest="content" />
<copyField source="title" dest="content" />
<copyField source="search_tag" dest="content" />
<copyField source="contentbin" dest="content"/>
<copyField source="content" dest="contentS" />
我还提供了关于“SearchHandler”的 solrconfig.xml 的一部分。我这样做是为了提高“精确”(锚定)短语匹配:
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<!--<str name="defType">edismax</str>
<str name="qf">content contentS^10</str>
<str name="pf">content^10 contentS^100</str>
<str name="ps">100</str>-->
<str name="echoParams">explicit</str>
<int name="rows">150</int>
<str name="sort">score desc</str>
<str name="defType">edismax</str>
<str name="qf">content contentS^10</str>
<str name="pf">content^10 contentS^100</str>
<str name="ps">100</str>
<str name="wt">json</str>
<str name="hl">true</str>
<str name="fl">solr_id,ida,type,model,keywordlist,title,apo_taxonomy,apo_dik,apo_date,grid_title</str>
<str name="hl.fl">content,title</str>
<str name="f.content.hl.alternateField">content</str>
<str name="hl.maxAlternateFieldLength">800</str>
<str name="hl.fragsize">800</str>
</lst>
</requestHandler>
一些有价值的评论:
- “apo_taxonomy”字段可以包含以下值:“Πόρτα”、“Πόρτα-1”和“Πόρτα-ασφ1”</li>
- “apo_dik”字段可以保存以下值:“Μια”、“Μιάμιση”和“ΟΧΤΟ”</li>
- “apo_date”和“apo_number”字段可以保存数值。
- 以上所有字段均使用“”。我使用“solr.TextField”类的原因是将上述字段复制到一个字段(“内容”)中,并通过 solr 的基本查询(“q”参数)使它们可搜索。
- 整个系列都是希腊语。
我的问题:
当用户选择(使用下拉框)“Πόρτα”的 apo_taxonomy 值时,Solr 返回包含“Πόρτα-1”和“Πόρτα-ασφ1”的文档(http://example.com/solr/efe_dioi/select/?q= : &fq =apo_taxonomy:(Πόρτα)+apo_date:(2009)&start=0&rows=100)。这不是用户需要的。当用户过滤“Πόρτα”(apo_taxonomy)文档的集合时,他/她看不到“Πόρτα-1”和/或“Πόρτα-ασφ1”的文档。使用“solr.TextField”可行吗?正如你所注意到的,我需要使用“q”参数加上“精确”匹配的提升来搜索“过滤字段”。
我想再添加一个过滤器:“apo_ses”。该字段将保存如下值:“ΜΕΡΑ”、“ΜΕΣΗΜΕΡΙ”、“ΑΠΟΓΕΥΜΑ”和“ΒΡΑΔΥ”。是否可以在使用值过滤时给出 solr 指令,比如“ΜΕΡΑ”以返回由“ΜΕΡΑ”和“ΜΕΣΗΜΕΡΙ”或“ΜΕΡΑ”或“ΜΕΣΗΜΕΡΙ”过滤的文档?
任何帮助将不胜感激。
我希望不会让你厌烦我的写作。