Исследуйте поиск, содержащий слова

Я пытаюсь написать сценарий, используя изучить свободно 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

Другие вопросы по тегам