简单易懂的Lucene实现从多域单条件(多条件)查询条件匹配

时间:2022-12-17 05:40:51

简单易懂的Lucene实现从多域查询条件匹配。通过搜索一个内容,从多域查询匹配内容。

两种方法:

1、用类MultiFieldQueryParser

      将要查询的字段设置相同,从不同的域都查询,并设置布尔变量为should,表示可能存在,这样如果至少有一个存在,就会返回,如果没有一个符合,则返回为0

        String[] query = {"你","你","你"};
String[] fields ={ TITLE, CONTENT, AUTHOR };
BooleanClause.Occur[] flags = {BooleanClause.Occur.SHOULD,
BooleanClause.Occur.SHOULD,
BooleanClause.Occur.SHOULD};
Query q=MultiFieldQueryParser.parse(Version.LUCENE_46, query, fields,flags, new StandardAnalyzer(Version.LUCENE_46));

2、用booleanQuery动态添加查询对象

        BooleanQuery booleanQuery = new BooleanQuery();

QueryParser parser1 = new QueryParser(Version.LUCENE_46,TITLE , new StandardAnalyzer(Version.LUCENE_30));
Query titleQuery = parser1.parse("你");
booleanQuery.add(titleQuery, BooleanClause.Occur.SHOULD);

QueryParser parser2 = new QueryParser(Version.LUCENE_46,CONTENT, new StandardAnalyzer(Version.LUCENE_30));
Query contentQuery = parser2.parse("你");
booleanQuery.add(contentQuery, BooleanClause.Occur.SHOULD);

QueryParser parser3 = new QueryParser(Version.LUCENE_46,AUTHOR, new StandardAnalyzer(Version.LUCENE_30));
Query authorQuery = parser3.parse("你");
booleanQuery.add(authorQuery, BooleanClause.Occur.SHOULD);
LuceneIndex.search(booleanQuery);
效果同上面的一样。

可以根据需要和编码习惯自行选择用哪种方式。


当然里面的查询字符串可以是不同的。这样就是多域多条件查询效果。