lucene query
2017-11-30 15:34
369 查看
建立索引后,给定一个查询词,可以进行搜索,官网有个建索引和搜索的小demo:
下面只看搜索的过程。
搜索重要的类:
下面介绍Query对象及其常用的子类:
http://lucene.apache.org/core/7_1_0/core/org/apache/lucene/search/Query.html
还有一个类QueryParser,它的parse方法可以产生Query:
http://lucene.apache.org/core/7_1_0/queryparser/org/apache/lucene/queryparser/classic/QueryParser.html
这个类是由JavaCC产生的。最重要的方法是 QueryParserBase.parse(String)。查询语句的语法是:一个
加号(+)或者减号(-),分别表明这个分句是必须的和被禁止的;
一个term后面跟一个冒号,表明哪个字段被搜索。这个可以创建在多个字段检索的queries。
一个分句可能是下面任何一个:
一个term,表明所有包含这个term的文档;或者
一个嵌套的query,被一对圆括号包含。注意,可以在前面加一个+/-。
所以,在BNF中,查询语法是:
正确格式的查询语句的例子可以在这里查看:query syntax documentation。
下面是查看索引中所有的行的代码:
Analyzer analyzer = new StandardAnalyzer(); // Store the index in memory: Directory directory = new RAMDirectory(); // To store an index on disk, use this instead: //Directory directory = FSDirectory.open("/tmp/testindex"); IndexWriterConfig config = new IndexWriterConfig(analyzer); IndexWriter iwriter = new IndexWriter(directory, config); Document doc = new Document(); String text = "This is the text to be indexed."; doc.add(new Field("fieldname", text, TextField.TYPE_STORED)); iwriter.addDocument(doc); iwriter.close(); // Now search the index: DirectoryReader ireader = DirectoryReader.open(directory); IndexSearcher isearcher = new IndexSearcher(ireader); // Parse a simple query that searches for "text": QueryParser parser = new QueryParser("fieldname", analyzer); Query query = parser.parse("text"); ScoreDoc[] hits = isearcher.search(query, null, 1000).scoreDocs; assertEquals(1, hits.length); // Iterate through the results: for (int i = 0; i < hits.length; i++) { Document hitDoc = isearcher.doc(hits[i].doc); assertEquals("This is the text to be indexed.",hitDoc.get("fieldname")); } ireader.close(); directory.close();
下面只看搜索的过程。
搜索重要的类:
IndexSearcher的
search方法会返回搜索的结果
ScoreDoc数组,
search方法需要传入
Query对象,这个对象代表了搜索条件。
下面介绍Query对象及其常用的子类:
http://lucene.apache.org/core/7_1_0/core/org/apache/lucene/search/Query.html
还有一个类QueryParser,它的parse方法可以产生Query:
http://lucene.apache.org/core/7_1_0/queryparser/org/apache/lucene/queryparser/classic/QueryParser.html
这个类是由JavaCC产生的。最重要的方法是 QueryParserBase.parse(String)。查询语句的语法是:一个
Query是一系列的分句。一个分句可能由下面的符号开头:
加号(+)或者减号(-),分别表明这个分句是必须的和被禁止的;
一个term后面跟一个冒号,表明哪个字段被搜索。这个可以创建在多个字段检索的queries。
一个分句可能是下面任何一个:
一个term,表明所有包含这个term的文档;或者
一个嵌套的query,被一对圆括号包含。注意,可以在前面加一个+/-。
所以,在BNF中,查询语法是:
Query ::= (Clause)* Clause ::= ["+", "-"] [<TERM> ":"] (<TERM> | "(" Query ")")
正确格式的查询语句的例子可以在这里查看:query syntax documentation。
下面是查看索引中所有的行的代码:
File path = new File("e:/index/suizhiIndex20170727"); Directory directory = FSDirectory.open(path); IndexReader reader = DirectoryReader.open(directory); IndexSearcher searcher = new IndexSearcher(reader); for (int i = 0; i < reader.maxDoc(); i++) { Document doc = searcher.doc(i); //... }
相关文章推荐
- 搜狗百度360市值齐跌:搜索引擎们陷入集体焦虑?
- 本人即将筹备败家日志,敬请期待!
- IE:使用搜索助手
- 基于Vue.js 2.0实现百度搜索框效果
- 在SQL Server 2005所有表中搜索某个指定列的方法
- Linux上的文件搜索命令实例详解
- 8个基于Lucene的开源搜索引擎(推荐)
- Android的搜索框架实例详解
- C++深度优先搜索的实现方法
- 基于文本的搜索
- php实现搜索一维数组元素并删除二维数组对应元素的方法
- 使用Sphinx对索引进行搜索
- asp 多关键词搜索的简单实现方法
- Android自定义控件实现UC浏览器语音搜索效果
- C#使用foreach语句搜索数组元素的方法
- WordPress中用于获取搜索表单的PHP函数使用解析
- Vue2.0实现1.0的搜索过滤器功能实例代码
- vue实现百度搜索下拉提示功能实例
- easyui combobox开启搜索自动完成功能的实例代码