Umbraco Lucene搜索汽车完成

时间:2013-07-16 16:47:57

标签: c# lucene umbraco examine

如何修改搜索以便能够点击我的searchString?

我有以下值的变量:

fieldName: nodeName
searchString: des

我希望能够通过其中的任何连续字符找到nodeName:例如输入Esa selects Ariane 6 basic design即可查找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" />

1 个答案:

答案 0 :(得分:1)

你可能需要比这简单得多。当用户在字段中键入时,您需要构建以下查询:

  

节点名称:d *

     

节点名称:DE *

     

节点名称:DES *

     

节点名称:DESI *

等等。

如果要搜索多个字段,请构建以下查询:

  

nodeName:d * bodyText:d *

     

nodeName:de * bodyText:de *

     

nodeName:des * bodyText:des *

     

nodeName:desi * bodyText:desi *

这将执行OR搜索,同时搜索为可选字段。在+的前面添加nodeName会使nodeName强制匹配但bodyText可选,例如:

  

+ nodeName:d * bodyText:d *

如果用户指定了多个术语,请使用正则表达式清理输入(删除所有非字母数字字符),根据空格拆分字符串并构建以下内容:

  

nodeName:graphic * nodeName:desi * bodyText:graphic * bodyText:desi *

或强制要求nodeName

  

+(nodeName:graphic * nodeName:desi *)bodyText:graphic * bodyText:desi *