代码之家  ›  专栏  ›  技术社区  ›  Sumi S

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

  •  5
  • Sumi S  · 技术社区  · 11 年前

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

    SELECT * FROM user where email LIKE '%ben%'" 
    

    我尝试了以下方法,

    <cfscript>
        mysearch = new com.adobe.coldfusion.search();
        searchResult = mysearch.search(collection="mycollection", criteria='ben*'); 
    </cfscript>
    
    1. criteria='ben*' 匹配的“原始”_ @雅虎。com'和' @雅虎。com,但未返回字符串'ro '.

    2. criteria='ben~' 匹配的“原始”_ @雅虎。com'和' @雅虎。com,但未返回字符串'ro '.

    对于所有模糊搜索和野生搜索尝试也是如此。

    1 回复  |  直到 11 年前
        1
  •  3
  •   Abhijit Bashetti    11 年前

    您需要更改可以使用solr.EdgeNGramFilterFactory生成令牌的字段的fieldType 借助它,您可以生成tokes,例如,abhijit将生成abh、abhi、abhij、abhiji、abhijit,因此将为您的查询匹配所有这些组合。

    使用第二个EdgeNGramFilterFactory,它将生成令牌 jit,ijit,hijit,bhijit,abhirit,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>
    
    推荐文章