2014-01-07 68 views
0

我已經索引了一個小集合(大約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> 

一些寶貴的意見:

  1. 的「apo_taxonomy」字段可以容納的值,如:「Πόρτα」我爲了拉動的「exactish」(掛靠)短語匹配這樣做「Πόρτα-1」,和「Πόρτα-ασφ1」
  2. 的「apo_dik」字段可容納像值:「Μια」,「Μιάμιση」和「ΟΧΤΟ」
  3. 的「apo_date」和「apo_number」 F字段可以保存數字值。
  4. 以上所有字段均使用「」。我使用「solr.TextField」類的原因是將上述字段複製到一個字段(「content」)中,並通過solr的基本查詢(「q」參數)使它們可搜索。
  5. 整個系列是希臘語。

我的問題:

  1. 當(使用下拉框)的「Πόρτα」 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」參數和「精確」匹配的提升來搜索「過濾字段」。

  2. 我想再添加一個過濾器:「apo_ses」。該字段將保存如下的值:「MEPA」,「MΩCHEMPI」,「AEMOTHYMAP」和「ΒΡΑΔΥ」。當使用值進行過濾時,是否可以給出solr說明讓我們說「ΜΕΡΑ」返回由「ΜΕΡΑ」和「ΜΕΣΗΜΕΡΙ」或「ΜΕΡΑ」或「ΜΕΣΗΜΕΡΙ」過濾的文檔?

任何幫助將不勝感激。

我希望不要因爲寫作而感到厭煩。

回答

0

對於你的問題1,我建議使用類型作爲字符串。如果您的字段(例如:apo_taxonomy)也將用於搜索,則考慮對fq使用字符串類型的apo_taxonomy_exact,其中apo_taxonomy_exact是apo_taxonomy的副本,對於fq目的而言,它是非標記化形式的。 <copyField source="apo_number" dest="apo_taxonomy_exact" /> 鍵入apo_taxonomy_exact是:

對於你的第二個問題,是這樣做FQ = apo_ses:((「ΜΕΡΑ」 AND「ΜΕΣΗΜΕΡΙ」)或「ΜΕΡΑ」或「ΜΕΣΗΜΕΡΙ」)

+0

對於答案1 :你如何建議索引「apo_taxonomy_exact」。注意「apo_taxonomy」是一個字符串而不是數字。對於答案2:我意識到這種查詢。我在這裏問的是,用戶是否可能使用「solrish」方法從下拉框中選擇一個值(例如「MΡΑΑ」)並且將「MΡΑΑ」和「MΕΣΗΜΕΡΙ」選中。也許「別名」 – anarchos78

+0

我在說的是,當我過濾(例如:apo_taxonomy)值:Πόρταsolr返回「Πόρτα」,「Πόρτα-1」「Πόρτα-2」的文檔。我應該爲新字段「apo_taxonomy_exact」使用什麼標記器? – anarchos78

+0

您的apo_taxonomy不是類型爲「text_efe_dioi」的「字符串」,其類型爲solr.TextField,它是標記化的,類型「string」是非標記化的。請參閱我的更新。對於問題2,沒有沒有任何陽光的方法。把它看成是這樣的,搜索引擎不應該處理這樣的規則,最好保持清潔,並且在特殊規則之外處理,這樣你就擁有了最大的靈活性。 – Arun