2013-12-11 2 views
0

검색어, 도시 또는 주 등 두 필드에서 어떻게 검색 할 수 있습니까? justdial과 같은 검색을해야합니다. 용어와 장소보다는 검색 용어로만 검색 결과를 얻고 있습니다. 아래 코드를 시도했지만 예외가 발생했습니다.여러 필드에 대한 질의 결합 - MVC에서 lucence.net 검색 C#

검색 방법 :

public static IEnumerable<SearchModel> Search(string input, string state, string city) 
     { 


      var terms = input.Trim().Replace("-", " ").Split(' ') 
       .Where(x => !string.IsNullOrEmpty(x)).Select(x => x.Trim() + "*"); 

       var stat = state.Trim().Replace("-", " ").Split(' ') 
      .Where(x => !string.IsNullOrEmpty(x)).Select(x => x.Trim()); 

     input = string.Join(" ", terms,stat); //Joiningstate here 

      return _search(input); 
     } 

_search 방법 :

private static IEnumerable<SearchModel> _search(string searchQuery) 
     { 
      // validation 
      if (string.IsNullOrEmpty(searchQuery.Replace("*", "").Replace("?", ""))) return new List<SearchModel>(); 

      // set up lucene searcher 
      using (var searcher = new IndexSearcher(_directory, false)) 
      { 
       var hits_limit = 1000; 
       var analyzer = new StandardAnalyzer(Version.LUCENE_30); 


       var parser = new MultiFieldQueryParser 
         (Version.LUCENE_30, new[] { "Name","StateName", "CityName" }, analyzer); 
       var query = parseQuery(searchQuery, parser); 

       var hits = searcher.Search(query, null, hits_limit, Sort.INDEXORDER).ScoreDocs; 
       var results = _mapLuceneToDataList(hits, searcher); 
       analyzer.Close(); 
       searcher.Dispose(); 
       return results; 

      } 

     } 

구문 분석 쿼리 :

private static Query parseQuery(string searchQuery, QueryParser parser) 
     { 
      Query query; 
      try 
      { 
       query = parser.Parse(searchQuery.Trim()); 
      } 
      catch (ParseException) 
      { 
       query = parser.Parse(QueryParser.Escape(searchQuery.Trim())); 
      } 
      return query; 
     } 

하지만 아래와 같은 구문 분석 쿼리에 예외를 얻고있다. enter image description here

도와주세요.

+1

lucene – Dreamwalker

+0

안녕하세요 Dreamer에게 전달하는 최종 검색 문자열을 표시 할 수 있다면 도움이 될 것입니다, 답장을 보내 주셔서 감사합니다. "호텔", "자동차"및 "전화"와 같은 의견을 보내고 있습니다. 이 텍스트는 도시 (예 : adak)와 주 (예 : Alasaka)를 기준으로 필터링해야합니다. 도시와 주없이 완벽한 결과를 얻고 있습니다. – Tej

+0

죄송합니다. parseQuery 함수에서 searchQuery의 값 – Dreamwalker

답변

0

edial.in 검색 스크립트로 시도 할 수 있습니다. 그래서 고급 느낌