Development Tip

Lucene QueryParser에서 두 개의 필드를 지정하는 방법은 무엇입니까?

yourdevel 2020. 11. 26. 19:59
반응형

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

반응형