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

Input Solr不返回部分或精确值输入的任何结果,input,solr,Input,Solr,所以我已经试着解决这个问题两天了,我并没有比我开始的时候更接近一个解决方案。我试图根据不完整的用户输入从Solr检索结果,例如: 我有一个产品名称大红色表 我在q参数中输入table,并期望Solr在其他结果中返回大型红色表格,但我没有得到任何结果 我知道该项存在,因为我可以使用q参数中的*:*获取所有文档以获取所有结果。Schema.xml如下所示: <?xml version="1.0" encoding="UTF-8" ?> <schema name="****

所以我已经试着解决这个问题两天了,我并没有比我开始的时候更接近一个解决方案。我试图根据不完整的用户输入从Solr检索结果,例如:

我有一个产品名称大红色表 我在q参数中输入table,并期望Solr在其他结果中返回大型红色表格,但我没有得到任何结果

我知道该项存在,因为我可以使用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>
  <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>
因此定义了文本,并通过copyFields指向ProductName和ProductLongDescription/选择处理程序如下所示:

    <?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>
  <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>
如果我将ProductName:*放在q参数中,它会查找所有产品名称,但如果我使用诸如ProductName:table之类的特定输入,甚至使用诸如ProductName:Large red table之类的精确匹配值,则不会得到任何结果


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

每次更改schema.xml后,您都重新编制了索引吗?当您为索引值输入大红色表格,为ProductName字段输入大作为查询值时,分析页面会显示什么?首先,感谢您的快速回复。是的,每次修改我都会重新编制索引,但我想我自己可能已经解决了这个问题,而你花了这么多时间才回复。我现在90%确定问题出在我的模式中的字段类型。我使用的是文本_general one,但当我在数据源上尝试与语言相关的分析器时,我从部分输入中得到了结果。