Solr在部分或精确值输入时不返回任何结果

时间:2014-11-05 13:46:06

标签: input solr

所以我一直试图解决这个问题2天,而且我的解决方案比我开始时更接近。我试图根据不完整的用户输入来检索Solr的结果,例如:

我有一个产品名称Large red table 我在q参数中键入table并期望Solr返回(在其他结果中)Large red table,但我没有得到任何结果。

我知道该项目存在,因为我可以使用q参数中的*:*获取所有文档以获取所有结果。 Schema.xml如下所示:

    <?xml version="1.0" encoding="UTF-8" ?>

<schema name="*****" version="1.5">

   <!-- Standard Fields -->
   <field name="_version_" type="long" indexed="true" stored="true"/>
   <field name="_root_" type="string" indexed="true" stored="false"/>

<!--
   <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 
-->

   <!--Custom Fields--> 
   <field name="ProductName" type="text_general" indexed="true" stored="true" />
   <field name="ProductLongDescription" type="text_general" indexed="true" stored="true" />
   <field name="ProductID" type="string" indexed="true" stored="false" required="false" multiValued="false" /> <!-- varcher -->
   <field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>



   <!--FieldTypes-->

   <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
      <analyser type="index">
         <tokenizer class="solr.StandardTokenizerFactory" />
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
            <filter class="solr.LowerCaseFilterFactory"/>
      </analyser>

      <analyser type="query">
         <tokenizer class="solr.StandardTokenizerFactory" />
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
            <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.LowerCaseFilterFactory"/>
      </analyser>

   </fieldType>


   <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>

   <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true">
   </fieldType>

   <!-- Copyfields -->
   <copyField source="ProductName" dest="text" />
   <copyField source="ProductLongDescription" dest="text" />

   <!-- Dynamicfields -->

   <!-- Unique key -->
   <!--
   <uniqueKey>ProductID</uniqueKey>
-->

</schema>

因此定义了“text”,并通过copyFields指向ProductName和ProductLongDescription。 / select handler看起来像这样:

  <requestHandler name="/select" class="solr.SearchHandler">
     <lst name="defaults">
       <str name="echoParams">explicit</str>
       <str name="rows">10</str>      
       <str name="df">text</str>        
     </lst>
    </requestHandler>

如果我在q参数中添加ProductName:*,它会找到所有产品名称,但如果我使用像ProductName:table这样的空间输入,或者甚至是ProductName:Large red table之类的完全匹配值,我都不会得到任何结果。< / p>

我尝试过使用edismax,不同的标记器和过滤器,但没有任何效果。任何人都可以告诉为什么这不起作用?我查看了程序附带的示例-DIH代码,并尝试尽可能多地复制它,因为该示例仅适用于q参数的部分输入。

0 个答案:

没有答案