2015-07-21 41 views
5

如何使用以下SQL搜索查詢的相同邏輯執行SOLR搜索?Coldfusion Solr搜索 - 相當於SQL中的LIKE%string%

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*'匹配 'raw_ @ yahoo.com' 和 ' @ yahoo.com',但沒有返回字符串'ro ben ro ben'。

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

同樣適用於所有模糊搜索,野外搜索嘗試。

+0

什麼是搜索字段的fieldType? –

回答

3

您需要更改您的字段的fieldType,該字段可以使用solr.EdgeNGramFilterFactory生成標記 藉助其可以生成標籤的例如abhijit會生成abh,abhi,abhij,abhiji,abhijit,因此會匹配所有這些組合以供查詢。

與第二EdgeNGramFilterFactory它將生成令牌 JIT,ijit,hijit,bhijit,作者Abhijit,I,II,日出,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> 
+0

我的問題是,在'ro ** ben **'中的字符串中間的'ben'沒有被添加到關鍵字列表中。有什麼辦法嗎? –

+0

是的,有...請找到答案編輯 –

+0

屬性側可能的值是什麼? –