Tyz*_*zak 63 parsing lucene.net field
我阅读了如何在QueryParser中合并多个字段?但我没有得到它.
目前我有一个非常奇怪的结构,如:
parser = New QueryParser("bodytext", analyzer)
parser2 = New QueryParser("title", analyzer)
query = parser.Parse(strSuchbegriff)
query2 = parser.Parse(strSuchbegriff)
Run Code Online (Sandbox Code Playgroud)
我能做些什么:
parser = New QuerParser ("bodytext" , "title",analyzer)
query =parser.Parse(strSuchbegriff)
Run Code Online (Sandbox Code Playgroud)
因此,Parser在字段"title"中的"bodytext"字段中查找搜索单词.
Sam*_*shi 150
有3种方法可以做到这一点.
第一种方法是手动构建查询,这就是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);
Run Code Online (Sandbox Code Playgroud)
第二种方法是使用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>"));
Run Code Online (Sandbox Code Playgroud)
最后一种方法是使用特殊语法,QueryParser
请参见此处.
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));
Run Code Online (Sandbox Code Playgroud)
您的另一种选择是创建新的领域,当你索引你的内容称为bodytextandtitle,可以在其中放置的内容都 bodyText的和标题,那么你只需要搜索一个领域.