如何使用以下SQL搜索查询的相同逻辑进行SOLR搜索?
SELECT * FROM user where email LIKE '%ben%'"
我试了以下命令,
<cfscript>
mysearch = new com.adobe.coldfusion.search();
searchResult = mysearch.search(collection="mycollection", criteria='ben*');
</cfscript>
criteria='ben*'
匹配的raw_本 @yahoo.com"one_answers"本 @yahoo.com"但没有返回字符串的ro 本 ro 本的。criteria='ben~'
匹配的raw_本 @yahoo.com"one_answers"本 @yahoo.com"但没有返回字符串的ro 本 ro 本的。
同样适用于所有模糊搜索,疯狂搜索尝试。
您需要更改字段的fieldType,该字段可以使用solr生成令牌。EdgeNGramFilterFactory在它的帮助下,您可以生成例如abhijit将生成abh, abhi, abhij, abhiji, abhijit,因此将匹配所有这些组合为您的查询。
使用第二个EdgeNGramFilterFactory,它将生成令牌Jit、ijit、hijit、bhijit、abhijit、iji、hiji、bhiji等等…尝试下面的字段类型
<fieldType name="text_reference" class="solr.TextField" sortMissingLast="true" omitNorms="true" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="50" side="front"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="50" side="back"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>