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