我正在 Solr 中使用宏扩展。我想使用参数替换更改 Solr 中的查询字符串,而无需在 Java 中编写额外的查询解析器。搜索应该首先精确(增强),然后模糊字段名称、类别、描述以及精确搜索,然后仅对字段 my_id 进行通配符搜索。我的输入参数是qq。 Solr 版本是 8.8.0。 Solr中的配置是:
<requestHandler class="solr.SearchHandler" name="/suggest">
<lst name="defaults">
<str name="defType">edismax</str>
<int name="rows">12</int>
<str name="q.op">AND</str>
<str name="df">name</str>
<str name="qf">name^2 category description^0.1</str>
<str name="pf">name^2 category description^0.1</str>
<str name="ps">5</str>
<str name="tie">0.8</str>
<str name="stopwords">true</str>
<str name="exactQuery">$${qq}^1000</str>
<str name="fuzzyQuery">$${qq}~$${precision}</str>
<str name="wildcardQuery">$${qq} OR *$${qq}*</str>
<str name="precision">0.7</str>
<str name="q">$${exactQuery} OR $${fuzzyQuery} OR my_id:$${wildcardQuery}</str>
</lst>
<arr name="components">
<str>query</str>
</arr>
</requestHandler>
字段名称、类别、描述的修改类型为“text_general”。
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="false">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.NGramFilterFactory" maxGramSize="20" minGramSize="3"/>
<filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
字段 my_id 具有修改后的类型“小写”:
<fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
</analyzer>
此配置不适用于模糊短语搜索。就像没有 l 的“bike yelow”。有人能帮助我吗?我做错了什么?