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

时间:2015-07-21 07:19:25

标签: solr coldfusion coldfusion-10

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

./bin/hbase org.apache.hadoop.hbase.mapreduce.Driver rowcounter table_name

我尝试了以下内容,

SELECT * FROM user where email LIKE '%ben%'" 
  1. <cfscript> mysearch = new com.adobe.coldfusion.search(); searchResult = mysearch.search(collection="mycollection", criteria='ben*'); </cfscript> 匹配&#39; raw_ ben @ yahoo.com&#39;和&#39; ben @ yahoo.com&#39;但没有返回字符串&lt; strong> ben ro ben &#39;

  2. criteria='ben*'匹配&#39; raw_ ben @ yahoo.com&#39;和&#39; ben @ yahoo.com&#39;但没有返回字符串&lt; strong> ben ro ben &#39;

  3. 同样适用于所有模糊搜索,狂野搜索尝试。

1 个答案:

答案 0 :(得分: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>