2013-07-16 93 views
0

如何修改搜索能夠擊中我的searchString?Umbraco Lucene搜索自動完成

我有變量具有以下值:

fieldName: nodeName 
searchString: des 

我希望能夠在任何連續的字符,找到一個節點名稱:例如通過輸入design找到Esa selects Ariane 6 basic design

我目前的搜索被構造爲:

var searchCriteria = SearchProvider.CreateSearchCriteria(BooleanOperation.Or); 

var luceneString = string.Format("{0}:", fieldName); 
luceneString += "(+" + searchString.Replace(" ", " +") + ")^10 "; 
luceneString += string.Format("{0}:{1}", fieldName, searchString); 
var rawQuery = searchCriteria.RawQuery(luceneString).Field(fieldName, searchString.Fuzzy(0.8f)); 

我檢查的定義:

<add name="AutoCompleteLookupIndexer" type="UmbracoExamine.UmbracoContentIndexer, UmbracoExamine" 
      supportUnpublished="true" 
      supportProtected="true" 
      analyzer="Lucene.Net.Analysis.Standard.StandardAnalyzer, Lucene.Net" /> 

+0

該分析儀是您使用?標準,空格都應該工作 – naresh

+0

@naresh是的,看我更新的問題 – cpoDesign

回答

1

你可能需要開始比這更簡單。你需要建立以下查詢作爲用戶類型分爲領域:

節點名稱:d *

節點名稱:德*

節點名稱:德*

節點名稱:德西*

等等。

如果你要搜索超過一個領域,構建以下查詢:

節點名稱:d * bodyText的:d *

節點名稱:德* bodyText的:DE *

節點名稱:DES * bodyText的:DES *

節點名稱:DESI * bodyText的:德西*

這將執行OR搜索,同時搜索可選字段。將+添加到nodeName的前面將使匹配nodeName爲強制性的,但bodyText可選,例如,G:

+節點名稱:d * bodyText的:d *

如果用戶指定了多個術語,使用正則表達式來淨化輸入(去除所有的非字母數字字符),分割字符串基於空間並構建以下:

節點名稱:圖形*節點名稱:DESI * bodyText的:圖形* bodyText的:德西*

或者馬基NG nodeName強制性:

+(節點名稱:圖形*節點名稱:DESI *)bodyText的:圖形* bodyText的:德西*