码迷,mamicode.com
首页 > Web开发 > 详细

lucene高级搜索

时间:2015-08-28 10:58:10      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

lucene中的提供了一套QueryParser类,用来进行解析搜索请求。

搜索请求就是用户输入关键词后,然后程序去分析关键词,获取用户搜索的真实意图。

QueryParser的基本使用:

queryParser用来分析用户输入的关键词,将关键词转换为query对象。其构造方法如下:

QueryParser parser = new QueryParser(Version.3.0,"title",new StandardAnalyzer(Version3.0));

Query query = parser.Parse("基金");

这里,queryParser解析为了“title:基金”这种形式。

这种形式是lucene的搜索格式:域名:值。

使用QueryParser解析多个关键词。

如果将"love china"传递给搜索引擎,他会这样操作:

1.搜索到所有包含love这个词的记录和所有包含china这个词的记录,然后将两部分记录加在一起,这是或的关系

2.搜索到所有包含love的记录和所有包含china的记录,然后去他们的交集,这是与关系。

Query q = parser.Parse("love china");//title:love,title:china

分为两个词进行查询,然后进行取交集。

2.高级搜索

  • 多字段的搜索
  • 多索引搜索

多字段搜索:一个文档中含有“标题”,“正文”等字段,搜索一个关键词,不管在标题中出现还是在正文中出现都算符合条件,这就是多字段的搜索。

利用BooleanQuery实现多字段的搜索

设置两个TermQuery,然后再他们之间做逻辑运算即可:

Document doc1 = new Document();

doc1.add(new Field("title","hello",Field.Store.Yes,Field.Index.Analyzed));

doc1.add(new Field("body","china",Field.Store.Yes.Field.Index.Analyzed));

writer.addDocument(doc1);

Term t1 = new Term("title","hello");

Term t2 = new Term("body","china")

Termquery q1 = new TermQuery(t1);

Termquery q2 = new Termquery(t2);

BooleanQuery bq = new BooleanQuery();

bq.add(q1,Occur.Must);//语法树格式的查询,should must not 

bq.add(q2,Occur.Must);

TopDocs docs = searcher.serach(q,null,10);

2.用multiFieldQueryParser实现多字段的搜索,内部还是BooleanQuery实现的,只不过是个封装。其构造方法如下:

MultiFieldQueryParser(Version,String [] Fields,Analyzer);

fields数组是多个字段名称组成的数组;

String [] fields ={"title","body"};

MultiFieldQueryParser  mp = new MultiFieldQueryParser(Version3.0,fields,new StandardAnalyzer(Version3.0));

Query q = mp.Parser("c");//在body和title这两个域下搜索含有字母c的内容。

是逻辑或关系。

 

lucene高级搜索

标签:

原文地址:http://www.cnblogs.com/mggwct/p/4765794.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!