0

如何修改搜索以便能够点击我的 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" />

4

1 回答 1

1

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

节点名称:d*

节点名称:de*

节点名称:des*

节点名称:desi*

等等。

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

节点名:d* 正文:d*

节点名:de* bodyText:de*

节点名:des* bodyText:des*

节点名称:desi* bodyText:desi*

这将执行 OR 搜索,将两者都作为可选字段进行搜索。+在of 前面添加 anodeName将使该匹配成为nodeName强制性但bodyText可选的,例如:

+nodeName:d* bodyText:d*

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

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

nodeName强制:

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

于 2013-07-17T09:03:54.843 回答