2014-01-19 8 views
1

Я пытаюсь написать сценарий, используя проверку свободного api.Изучить поиск содержит слова

У меня есть условия, которые мне нужно выполнить

  • поиск должен найти узлы, начиная с SEARCHTERM
  • поиск должен найти узлы, содержащие SEARCHTERM
  • поиск должен найти узлы заканчивая SEARCHTERM
  • поиска должен поддерживать несколько слов
  • поиск не должен прерываться из-за & * `и еще cha racters

Я могу совместить только слова, начиная с этой строки.

Когда я исполняю в код ниже, я получаю только слова, начиная с 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

Смежные вопросы