Coldfusion Solr 搜索 - 相当于 SQL 中的 LIKE %string%
Coldfusion Solr Search - equivalent to LIKE %string% in SQL
如何使用与以下 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_ben@yahoo.com' 和 'ben@yahoo.com' 但没有 return字符串 'roben roben'.
criteria='ben~'
匹配 'raw_ben@yahoo.com' 和 'ben@yahoo.com' 但没有 return字符串 'roben roben'.
同样适用于所有模糊搜索、疯狂搜索尝试。
您需要更改您的字段的字段类型,它可以使用 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>
如何使用与以下 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_ben@yahoo.com' 和 'ben@yahoo.com' 但没有 return字符串 'roben roben'.criteria='ben~'
匹配 'raw_ben@yahoo.com' 和 'ben@yahoo.com' 但没有 return字符串 'roben roben'.
同样适用于所有模糊搜索、疯狂搜索尝试。
您需要更改您的字段的字段类型,它可以使用 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>