반응형
Lucene QueryParser에서 두 개의 필드를 지정하는 방법은 무엇입니까?
QueryParser에서 여러 필드를 통합하는 방법을 읽었습니다 . 하지만 이해하지 못했습니다.
현재 나는 다음과 같은 매우 이상한 구조를 가지고 있습니다.
parser = New QueryParser("bodytext", analyzer)
parser2 = New QueryParser("title", analyzer)
query = parser.Parse(strSuchbegriff)
query2 = parser.Parse(strSuchbegriff)
다음과 같이 무엇을 할 수 있습니까?
parser = New QuerParser ("bodytext" , "title",analyzer)
query =parser.Parse(strSuchbegriff)
그래서 파서는 "bodytext"필드와 "title"필드에서 검색 단어를 찾습니다.
이를 수행하는 세 가지 방법이 있습니다.
첫 번째 방법은 쿼리를 수동으로 구성하는 것 QueryParser
입니다. 이것이 내부적으로 수행되는 작업입니다. 이것은이를 수행하는 가장 강력한 방법이며,의 좀 더 이국적인 기능에 대한 액세스를 방지하려는 경우 사용자 입력을 구문 분석 할 필요가 없음을 의미합니다 QueryParser
.
IndexReader reader = IndexReader.Open("<lucene dir>");
Searcher searcher = new IndexSearcher(reader);
BooleanQuery booleanQuery = new BooleanQuery();
Query query1 = new TermQuery(new Term("bodytext", "<text>"));
Query query2 = new TermQuery(new Term("title", "<text>"));
booleanQuery.add(query1, BooleanClause.Occur.SHOULD);
booleanQuery.add(query2, BooleanClause.Occur.SHOULD);
// Use BooleanClause.Occur.MUST instead of BooleanClause.Occur.SHOULD
// for AND queries
Hits hits = searcher.Search(booleanQuery);
두 번째 방법 MultiFieldQueryParser
은를 사용 QueryParser
하는 것입니다. 이것은를 사용하는 것입니다. 이는 여러 필드를 검색한다는 점을 제외하고는 보유한 모든 권한에 액세스 할 수 있도록합니다.
IndexReader reader = IndexReader.Open("<lucene dir>");
Searcher searcher = new IndexSearcher(reader);
Analyzer analyzer = new StandardAnalyzer();
MultiFieldQueryParser queryParser = new MultiFieldQueryParser(
new string[] {"bodytext", "title"},
analyzer);
Hits hits = searcher.Search(queryParser.parse("<text>"));
마지막 방법은 QueryParser
see here 의 특수 구문을 사용하는 것 입니다.
IndexReader reader = IndexReader.Open("<lucene dir>");
Searcher searcher = new IndexSearcher(reader);
Analyzer analyzer = new StandardAnalyzer();
QueryParser queryParser = new QueryParser("<default field>", analyzer);
// <default field> is the field that QueryParser will search if you don't
// prefix it with a field.
string special = "bodytext:" + text + " OR title:" + text;
Hits hits = searcher.Search(queryParser.parse(special));
다른 옵션은 인덱스 당신의 내용을 배치 할 수있는에 bodytextandtitle라는 내용, 때 새 필드를 만드는 것입니다 모두 bodytext와 제목, 당신은 하나 개의 필드를 검색 할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/2005084/how-to-specify-two-fields-in-lucene-queryparser
반응형
'Development Tip' 카테고리의 다른 글
추가 된 요소에서 CSS 전환 트리거 (0) | 2020.11.26 |
---|---|
find (), findOrFail (), first (), firstOrFail (), get (), list (), toArray ()의 차이점은 무엇입니까? (0) | 2020.11.26 |
Xcode 4에서“Run> Stop on Objective-C 예외”? (0) | 2020.11.26 |
한 시스템에서 다른 시스템으로 Xcode 4 코드 스 니펫을 전송하는 방법 (0) | 2020.11.26 |
개체 목록의 속성 합계 / 평균 (0) | 2020.11.26 |