那么我已经解决了如下问题(带有前缀和后缀):
在 solrconfig.xml 中:
<updateRequestProcessorChain name="exact">
<processor class="solr.CloneFieldUpdateProcessorFactory">
<str name="source">phrase</str>
<str name="dest">phraseExact</str>
</processor>
<processor class="solr.RegexReplaceProcessorFactory">
<str name="fieldName">phraseExact</str>
<str name="pattern">^(.*)$</str>
<str name="replacement">_prefix_ $1 _suffix_</str>
<bool name="literalReplacement">false</bool>
</processor>
<processor class="solr.LogUpdateProcessorFactory" />
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
<!-- other contents of solrconfig.xml... -->
<requestHandler name="/update" class="solr.UpdateRequestHandler">
<lst name="defaults">
<str name="update.chain">exact</str>
</lst>
</requestHandler>
在 schema.xml 中:
<field name="phrase" type="text_en" indexed="true" stored="true"/>
<field name="phraseExact" type="text_en" indexed="true" stored="true"/>
更改后需要重新启动 Solr 实例,然后重新索引(重新添加)所有文档。
现在我们有这样的文件:
{
"phrase": "test",
"id": "9c95fac2ed78149c",
"phraseExact": "_prefix_ test _suffix_",
"_version_": 1471599816879374300
},
{
"phrase": "test phrase",
"id": "9c95fac2ed78123c",
"phraseExact": "_prefix_ test phrase _suffix_",
"_version_": 1471599816123474300
},
如果通过以下查询搜索文档
"q=phraseExact:"_prefix_ test _suffix_"
"q=phraseExact:"_prefix_ testing _suffix_"
"q=phraseExact:"_prefix_ tests _suffix_"
我们只会收到 {"phrase":"test"} 文档(而不是 {"phrase":"test phrase"})