所以我一直试图解决这个问题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参数的部分输入。