文档章节

android_studio Lucene入门

D
 D-dragon
发布于 2016/05/07 11:43
字数 704
阅读 253
收藏 3

最近想在android上弄个搜索应用,但入门就比较麻烦。首先现在都建议用 android studio这个工具,其次lucene更新实在太快,新版资料很难找。

一、android studio

这个版本目前已经更新到2.0了,自己按照网上官方的介绍,下了个JDK8和2.0安装包,安装包居然有1G多点,安装好后,又下载了些东西,总之,只是这个android studio安装就不是个简单的事。

二、创建JAVA应用

1.

不能创建工程,而是创建module这个选项,然后选择java library这个选项。运行JAVA类时,直接在当前运行的类右键会弹出一个运行对话框即可。

2.由于个人对ide并不是很熟悉,关于添加lib这个弄了半天,真没弄来,直接没看见新建的工程下有libs这个文件夹,自己新建一个也不得行,最后google终于明白怎么用了。

工程上面有个下拉箭头,选择工程文件这个选项,就能看到每个工程目录下的所有文件夹,然后将相关的jar包复制到libs目录下,复制好以后,

好像只能一个一个的添加。。。

经历过上面的步骤以后,环境基本搭建完毕。


3.开始lucene6.0的测试

6.0的资料实在太少,个人对java虽然比较了解,但对lucene并不了解,找一个5分钟教材,复制过来,有些错误,把它改正了下,总算是能运行了。

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopScoreDocCollector;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;

import java.io.IOException;
import java.text.ParseException;

public class TestClass {
    public static void main(String[] args) throws Exception {
        // 0. Specify the analyzer for tokenizing text.
        //    The same analyzer should be used for indexing and searching
        StandardAnalyzer analyzer = new StandardAnalyzer();

        // 1. create the index
        Directory index = new RAMDirectory();

        IndexWriterConfig config = new IndexWriterConfig(analyzer);

        IndexWriter w = new IndexWriter(index, config);
        w.addDocument(getDoc("Lucene in Action", "193398817"));
        w.addDocument(getDoc("Lucene for Dummies", "55320055Z"));
        w.addDocument(getDoc("Managing Gigabytes", "55063554A"));
        w.addDocument(getDoc("The Art of Computer Science", "9900333X"));
        w.addDocument(getDoc("The Art of lucene Science", "9900555"));
        w.close();

        // 2. query
        String queryParameter =  "lucene";
        // the "title" arg specifies the default field to use
        // when no field is explicitly specified in the query.
        Query q = new QueryParser( "title", analyzer).parse(queryParameter);

        // 3. search
        int hitsPerPage = 10;
        IndexReader reader = DirectoryReader.open(index);
        IndexSearcher searcher = new IndexSearcher(reader);
        TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage);
        searcher.search(q, collector);
        ScoreDoc[] hits = collector.topDocs().scoreDocs;

        // 4. display results
        System.out.println("Found " + hits.length + " hits.");
        for(int i=0;i<hits.length;++i) {
            int docId = hits[i].doc;
            Document d = searcher.doc(docId);
            System.out.println((i + 1) + ". " + d.get("isbn") + "\t" + d.get("title"));
        }
        // reader can only be closed when there
        // is no need to access the documents any more.
        reader.close();
    }

    private static Document getDoc(String title, String isbn) throws IOException {
        Document doc = new Document();
        doc.add(new TextField("title", title, Field.Store.YES));
        // use a string field for isbn because we don't want it tokenized
        doc.add(new StringField("isbn", isbn, Field.Store.YES));
        return doc;
    }
}



基本步骤有五步,指定一个分析词语的分析器、创建索引、创建查询对象、搜索、显示搜索结果。

© 著作权归作者所有

共有 人打赏支持
D
粉丝 6
博文 41
码字总数 40861
作品 0
资阳
程序员
私信 提问
Android零基础入门第85节:Fragment使用起来非常简单

Fragment创建完成后并不能单独使用,还需要将Fragment加载到Activity中,在Activity中添加Fragment的方式有两种:静态加载和动态加载,接下来分别进行学习。 一、静态加载 静态加载Fragment非...

鑫鱻
2017/10/27
0
0
Android零基础入门第82节:Activity数据回传

上一节学习了将简单的数据从MainActivity传递到SecondActivity,本节一起来学习数据如何从SecondActivity回传到MainActivity。 一、简介 前面己经提到,Activity 还提供了一个 startActivit...

鑫鱻
2017/10/24
0
0
Android零基础入门第78节:四大组件的纽带——Intent

前面学习Activity时己经多次使用了 Intent,当一个Activity需要启动另一个Activity时, 程序并没有直接告诉系统要启动哪个Activity,而是通过Intent来表达自己的意图:需要启动哪个Activity。...

鑫鱻
2017/10/18
0
0
Android零基础入门第87节:Fragment添加、删除、替换

前面一起学习了Fragment的创建和加载,以及其生命周期方法,那么接下来进一步来学习Fragment的具体使用,本期先来学习Fragment添加、删除、替换。 一、概述 在前面的学习中,特别是动态加载的...

鑫鱻
2017/11/08
0
0
Android零基础入门第81节:Activity数据传递

在Android开发中,经常要在Activity之间传递数据。前面也学习了Activity和Intent相关基础,接下来一起来学习Activity的数据传递。 一、简介 通过前面的学习知道,Intent可以用来开启Activit...

鑫鱻
2017/10/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java 11 已发布,String 还能这样玩!

在文章《Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码》中,我有介绍到 Java 11 的八个新特性,其中关于 String 加强部分,我觉得有点意思,这里单独再拉出来讲。 Java 11 增加...

Java技术栈
25分钟前
2
0
什么是以太坊DAO?(二)

Decentralized Autonomous Organization,简称DAO,以太坊中重要的概念。一般翻译为去中心化的自治组织。 在上一节中,我们为了展示什么是DAO创建了一个合约,就像一个采用邀请制的俱乐部,会...

geek12345
41分钟前
4
0
全屋WiFi彻底无死角 这才是终极解决方案

无线网络现在不仅在家庭中不可或缺,在酒店、医院、学校等场景中的需求也越来越多。尤其是这些场景中,房间多但也需要每个房间都能够完美覆盖WiFi,传统的吸顶式AP就无法很好的解决问题。 H3...

linux-tao
55分钟前
4
0
Python日期字符串比较

需要用python的脚本来快速检测一个文件内的二个时间日期字符串的大小,其实实现很简单,首先一些基础的日期格式化知识如下 复制代码 %a星期的简写。如 星期三为Web %A星期的全写。如 星期三为...

dragon_tech
55分钟前
3
0
ORA 各种oraclesql错误

ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出最大进程数 () ORA-00021: 会话附属于其它某...

青峰Jun19er
59分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部