我已經索引了一個小集合(大約150k文檔)。我讓用戶能夠使用下拉框進行過濾查詢。 「字段查詢」字段是:apo_taxonomy,apo_dik,apo_number和apo_date。以下是schema.xml的一部分:Solr [版本3.6.1]過濾查詢問題
<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」字段可以容納的值,如:「Πόρτα」我爲了拉動的「exactish」(掛靠)短語匹配這樣做「Πόρτα-1」,和「Πόρτα-ασφ1」
- 的「apo_dik」字段可容納像值:「Μια」,「Μιάμιση」和「ΟΧΤΟ」
- 的「apo_date」和「apo_number」 F字段可以保存數字值。
- 以上所有字段均使用「」。我使用「solr.TextField」類的原因是將上述字段複製到一個字段(「content」)中,並通過solr的基本查詢(「q」參數)使它們可搜索。
- 整個系列是希臘語。
我的問題:
當(使用下拉框)的「Πόρτα」 Solr的返回包含「Πόρτα-1」的文檔apo_taxonomy值,以及「Πόρτα-ασφ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」。該字段將保存如下的值:「MEPA」,「MΩCHEMPI」,「AEMOTHYMAP」和「ΒΡΑΔΥ」。當使用值進行過濾時,是否可以給出solr說明讓我們說「ΜΕΡΑ」返回由「ΜΕΡΑ」和「ΜΕΣΗΜΕΡΙ」或「ΜΕΡΑ」或「ΜΕΣΗΜΕΡΙ」過濾的文檔?
任何幫助將不勝感激。
我希望不要因爲寫作而感到厭煩。
對於答案1 :你如何建議索引「apo_taxonomy_exact」。注意「apo_taxonomy」是一個字符串而不是數字。對於答案2:我意識到這種查詢。我在這裏問的是,用戶是否可能使用「solrish」方法從下拉框中選擇一個值(例如「MΡΑΑ」)並且將「MΡΑΑ」和「MΕΣΗΜΕΡΙ」選中。也許「別名」 – anarchos78
我在說的是,當我過濾(例如:apo_taxonomy)值:Πόρταsolr返回「Πόρτα」,「Πόρτα-1」「Πόρτα-2」的文檔。我應該爲新字段「apo_taxonomy_exact」使用什麼標記器? – anarchos78
您的apo_taxonomy不是類型爲「text_efe_dioi」的「字符串」,其類型爲solr.TextField,它是標記化的,類型「string」是非標記化的。請參閱我的更新。對於問題2,沒有沒有任何陽光的方法。把它看成是這樣的,搜索引擎不應該處理這樣的規則,最好保持清潔,並且在特殊規則之外處理,這樣你就擁有了最大的靈活性。 – Arun