Umbraco Lucene поиск автозаполнения
Как мне изменить поиск, чтобы иметь возможность поразить мою строку поиска?
У меня есть переменные со следующими значениями:
fieldName: nodeName
searchString: des
Я хочу, чтобы можно было найти имя узла по любым непрерывным символам в нем: например, найти 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 ответ
Вы, вероятно, должны начать гораздо проще, чем это. Вам нужно построить следующие запросы, когда пользователь вводит в поле:
NodeName: д *
NODENAME: де *
NODENAME: дез *
NODENAME: Дези *
и так далее.
Если вы хотите выполнить поиск по нескольким полям, создайте следующие запросы:
имя_узла: d * bodyText: d *
имя_узла: de * bodyText: de *
имя узла: des * bodyText: des *
имя_узла: деси * bodyText: деси *
Это выполнит поиск ИЛИ, поиск в обоих необязательных полях. Добавление +
перед nodeName
сделает это соответствие nodeName
обязательно, но bodyText
необязательно, например:
+ имя_узла: d * bodyText: d *
Если пользователь указывает более одного термина, используйте регулярное выражение для очистки входных данных (удалите все не буквенные цифры), разделите строку на основе пробелов и создайте следующее:
имя_узла: графический * имя_узла: деси * текст: текст * текст * текст: текст *
Или делая nodeName
обязательный:
+ (имя узла: графика * имя узла: деси *) bodyText: графика * bodyText: деси *