Исследуйте поиск, содержащий слова
Я пытаюсь написать сценарий, используя изучить свободно API.
У меня есть условия, которые мне нужно выполнить
- поиск должен найти узлы, начинающиеся с searchTerm
- поиск должен найти узлы, содержащие searchTerm
- поиск должен найти узлы, заканчивающиеся searchTerm
- поиск должен поддерживать несколько слов
- поиск не должен завершиться неудачей из-за & * `и других символов
Я могу сопоставить только слова, начинающиеся с этой строки.
Когда я выполняю код ниже, я получаю только слова, начинающиеся с searchTerm
public IEnumerable<SearchResultItem> Search(string searchTerm)
{
//Create search Criteria
var sc = ExamineManager.Instance.CreateSearchCriteria();
//define query
var query = sc.NodeName(searchTerm.MultipleCharacterWildcard())
.Or()
.Field("content", searchTerm.MultipleCharacterWildcard())
.Compile();
var results = ExamineManager.Instance.SearchProviderCollection["ContentSearcher"].Search(query);
return results.OrderBy(x => x.Score).Select(MapSearchResults);
}
Как мне обновить поисковый скрипт для всех условий?
1 ответ
Решение с необработанным запросом. При этом при поиске необходимо найти узлы, начинающиеся с searchTerm, поиск должен найти узлы, связанные с searchTerm, поиск должен найти узлы, заканчивающиеся searchTerm, поиск должен поддерживать несколько слов
var searchTerm = Request["term"].Split(new char[0], StringSplitOptions.RemoveEmptyEntries);
var searcher = ExamineManager.Instance.SearchProviderCollection["ExternalSearcher"];
var searchCriteria = searcher.CreateSearchCriteria();
var luceneString = new System.Text.StringBuilder();
luceneString.Append("nodeTypeAlias:");
luceneString.Append("*");
for (int i = 0; i < searchTerm.Length; i++)
{
luceneString.Append(" AND ");
luceneString.Append("title:");
luceneString.Append("*");
luceneString.Append(searchTerm[i]);
luceneString.Append("*");
}
var query = searchCriteria.RawQuery(luceneString.ToString());
var searchResults = searcher.Search(query);
эта статья помогла мне http://www.lucenetutorial.com/lucene-query-syntax.html