2014-01-19 5 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

원시 쿼리가있는 솔루션. 이 검색 여러 단어

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); 

을 지원해야합니다 SEARCHTERM와 검색을 종료 노드를 찾아야합니다 SEARCHTERM 검색을 containg 노드를 찾아야합니다 SEARCHTERM와 검색을 시작 노드를 찾아야합니다 가져가해야이 문서는 나에게 http://www.lucenetutorial.com/lucene-query-syntax.html

도움