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;
}
하지만 아래와 같은 구문 분석 쿼리에 예외를 얻고있다.
도와주세요.
lucene – Dreamwalker
안녕하세요 Dreamer에게 전달하는 최종 검색 문자열을 표시 할 수 있다면 도움이 될 것입니다, 답장을 보내 주셔서 감사합니다. "호텔", "자동차"및 "전화"와 같은 의견을 보내고 있습니다. 이 텍스트는 도시 (예 : adak)와 주 (예 : Alasaka)를 기준으로 필터링해야합니다. 도시와 주없이 완벽한 결과를 얻고 있습니다. – Tej
죄송합니다. parseQuery 함수에서 searchQuery의 값 – Dreamwalker