Coldfusion Solr Search - 相当于SQL中的LIKE%string%

Sum*_*i S 5 coldfusion solr coldfusion-10

如何使用以下SQL搜索查询的相同逻辑进行SOLR搜索?

SELECT * FROM user where email LIKE '%ben%'" 
Run Code Online (Sandbox Code Playgroud)

我试过以下,

<cfscript>
    mysearch = new com.adobe.coldfusion.search();
    searchResult = mysearch.search(collection="mycollection", criteria='ben*'); 
</cfscript>
Run Code Online (Sandbox Code Playgroud)
  1. criteria='ben*'匹配'raw_ ben @ yahoo.com'和' ben @ yahoo.com',但没有返回字符串'ro ben ro ben '.

  2. criteria='ben~'匹配'raw_ ben @ yahoo.com'和' ben @ yahoo.com',但没有返回字符串'ro ben ro ben '.

所有模糊搜索,狂野搜索尝试都是如此.

Abh*_*tti 3

您需要更改字段的 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>
Run Code Online (Sandbox Code Playgroud)