문제

프로젝트에 대한 고급 검색을 구현하고 싶습니다. 검색은 현재 사용자가 입력하는 모든 문자열을 사용하여 기준 API와 하나의 큰 분리를 만듭니다.

이것은 잘 작동하지만 이제는 더 많은 기능을 구현하고 싶습니다.

나는 문자열을 구문 분석하고 문자열에서 구축 기준을 구문 분석하는 데 어려움을 겪었습니다. 나는 찾았다 이 stackoverflow 질문, 그러나 그것은 실제로 도움이되지 않았습니다 (그는 그가 원하는 것을 분명히하지 못했습니다).

나는 또 다른 것을 발견했다 기사, 그러나 이것은 훨씬 더 많은 것을 지원하고 SQL 문을 뱉어냅니다. 내가 들었던 또 다른 것은 Lucene입니다. 그러나 이것이 실제로 도움이 될지 확실하지 않습니다.


나는 약간의 검색을 해왔고 Lucene.net whitespaceanalyzer와 queryparser를 발견했습니다.

검색 A와 B 또는 C를 +A +BC와 같은 것으로 변경합니다. 이는 올바른 방향의 좋은 단계입니다 (또한 브래킷을 처리 함). 다음 단계는 변환 된 문자열을 연결 및 분리 세트로 만드는 것입니다.

그만큼 내가 찾은 Java 예 nhibernate에서 찾을 수없는 쿼리 빌더를 사용하고있었습니다.

더 이상 아이디어가 있습니까?

도움이 되었습니까?

해결책 2

내가 기본적으로 지금하고있는 것은 Lucene.net Parse API로 입력 문자열을 구문 분석하는 것입니다. 이것은 나에게 균일하고 단순화 된 구문을 제공합니다. (의사 코드)

using Lucene.Net.Analysis;
using Lucene.Net.Analysis.Standard;
using Lucene.Net.QueryParsers;
using Lucene.Net.Search;

void Function Search (string queryString)
{
    Analyzer analyzer = new WhitespaceAnalyzer();
    QueryParser luceneParser = new QueryParser("name", analyzer);
    Query luceneQuery = luceneParser.Parse(queryString);
    string[] words = luceneQuery.ToString().Split(' ');

    foreach (string word in words)
    {
        //Parsing the lucene.net string
    }
}

그 후 나는이 문자열을 수동으로 구문 분석하여 분리 및 연결을 만듭니다.

다른 팁

들어 본 적이없는 것 같아요 nhibernate 검색 지금까지

nhibernate 검색은 그 아래에 루센을 사용하고 사용 및 문법을 사용하는 모든 옵션을 제공합니다.
당신이해야 할 일은 당신의 엔티티가 인덱싱에 대한 속성이라고 생각하고 nhibernate는 사전 정의 된 위치에서 그것을 색인화합니다.
다음에 Lucene이 노출하는 전력 으로이 색인을 검색 한 다음 도메인 레벨 엔티티 객체를 대가로 얻을 수 있습니다.

using (IFullTextSession s = Search.CreateFullTextSession(sf.OpenSession(new SearchInterceptor()))) {

        QueryParser qp = new QueryParser("id", new StopAnalyzer());

        IQuery NHQuery = s.CreateFullTextQuery(qp.Parse("Summary:series"), typeof(Book));

        IList result = NHQuery.List();

강력하지 않습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top