0

我索引了一个小集合(大约 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>

一些有价值的评论:

  1. “apo_taxonomy”字段可以包含以下值:“Πόρτα”、“Πόρτα-1”和“Πόρτα-ασφ1”</li>
  2. “apo_dik”字段可以保存以下值:“Μια”、“Μιάμιση”和“ΟΧΤΟ”</li>
  3. “apo_date”和“apo_number”字段可以保存数值。
  4. 以上所有字段均使用“”。我使用“solr.TextField”类的原因是将上述字段复制到一个字段(“内容”)中,并通过 solr 的基本查询(“q”参数)使它们可搜索。
  5. 整个系列都是希腊语。

我的问题:

  1. 当用户选择(使用下拉框)“Πόρτα”的 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”参数加上“精确”匹配的提升来搜索“过滤字段”。

  2. 我想再添加一个过滤器:“apo_ses”。该字段将保存如下值:“ΜΕΡΑ”、“ΜΕΣΗΜΕΡΙ”、“ΑΠΟΓΕΥΜΑ”和“ΒΡΑΔΥ”。是否可以在使用值过滤时给出 solr 指令,比如“ΜΕΡΑ”以返回由“ΜΕΡΑ”和“ΜΕΣΗΜΕΡΙ”或“ΜΕΡΑ”或“ΜΕΣΗΜΕΡΙ”过滤的文档?

任何帮助将不胜感激。

我希望不会让你厌烦我的写作。

4

1 回答 1

0

对于您的问题 1,我建议使用 type as string 。如果您的字段(例如:apo_taxonomy)也将用于搜索,则考虑将 apo_taxonomy_exact 与 fq 的字符串类型一起使用,其中 apo_taxonomy_exact 是用于 fq 目的的非标记形式的 apo_taxonomy 的副本。 <copyField source="apo_number" dest="apo_taxonomy_exact" /> apo_taxonomy_exact 的类型为:

对于您的第二个问题,是的,请执行 fq=apo_ses 之类的操作:((“ΜΕΡΑ”和“ΜΕΣΗΜΕΡΙ”)或“ΜΕΡΑ”或“ΜΕΣΗΜΕΡΙ”)

于 2014-01-07T15:54:49.940 回答