android 和 lucene

lucene可以放到android中使用吗?如果需要修改lucene源码,要怎么改呢?我用lucene写了一个放在android平板上的搜索器,可是不报错,但也不运行,这是怎么回事?有谁会改吗?


package android.search;

import java.io.File;    
import java.io.FileReader;
import java.io.IOException;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.util.Version;
    
import android.app.Activity;    
import android.os.Bundle;    
import android.os.Environment;  
import android.util.Log;  
import android.view.View;    
import android.view.View.OnClickListener;    
import android.widget.Button;    
import android.widget.EditText;    
import android.widget.TextView;    
import android.widget.Toast;    
// extends Activtiy     
//implements OnClickListener 实现click方法    
public class AndroidsearchActivity extends Activity implements OnClickListener {    
    /** Called when the activity is first created. */    
        
    private File file;  //文件对象  
    private String path;  //路径  
    private String info;  //目标文件所在路径  
    private String key; //关键字    
    private TextView result; // 显示结果    
    private EditText et; // 编辑view    
    private Button search_btn; // button view    
        
    @Override    
    public void onCreate(Bundle savedInstanceState) {    
        super.onCreate(savedInstanceState);  //创建程序  
        setContentView(R.layout.main);  //导入main。xml  
            
        result = (TextView)findViewById(R.id.TextView_Result);  //结果  
        et = (EditText)findViewById(R.id.key);  //关键词  
        search_btn = (Button)findViewById(R.id.button_search); // 按键  
        //file = new File(Environment.getExternalStorageDirectory().getPath());    
       // file = new File("/mnt/");  //确定搜索的路径  
        info = getString(R.string.info);  //将String.xml中的“目标文件所在路径”这就话传给info  
        search_btn.setOnClickListener(this);//设置监听    
    }    
    
    /* (non-Javadoc)  
     * @see android.view.View.OnClickListener#onClick(android.view.View)  
     */    
    public void onClick(View v) { //点击按钮此程序运行         
        // TODO Auto-generated method stub    
    	StringBuffer sb = new StringBuffer();
        path = "";         //path付初值为空  
        result.setText("");  //将结果显示设为空白       
        key = et.getText().toString();  //将从文本框中得到的文件名转换为String型      
        index();  //运行BrowserFile方法  
        search(sb);
        result.setText(sb);
    }    
    public void index(){
		IndexWriter indexwriter = null;
		Directory directory;
		try {
			directory = FSDirectory.open(new File("/mnt/sdcard/kankan/"));//将索引创建在平板电脑的/mnt/sdcard/kankan/目录下
			IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_35,new StandardAnalyzer(Version.LUCENE_35));
			indexwriter = new IndexWriter(directory,iwc);
			Document document = null;
			File file = new File("/mnt/sdcard/kankan/");//确定搜索路径
			for(File files:file.listFiles()){
				document=new Document();
				document.add(new Field("content",new FileReader(file)));
				document.add(new Field("file",files.getName(),Field.Store.YES,Field.Index.ANALYZED));
				document.add(new Field("path",files.getPath(),Field.Store.YES,Field.Index.ANALYZED));
				if(indexwriter!=null)
						indexwriter.close();
			}
		} catch (IOException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		}
		
	}
	public StringBuffer search(StringBuffer sb){
		Directory directory;
		try {
			directory = FSDirectory.open(new File("/mnt/sdcard/kankan/"));//打开索引
			IndexReader indexreader;
			indexreader = IndexReader.open(directory);
			IndexSearcher indexsearcher = new IndexSearcher(indexreader);
			QueryParser queryparser = new QueryParser(Version.LUCENE_35,"content",new StandardAnalyzer(Version.LUCENE_35));
			Query query;
			query = queryparser.parse("ads");
			TopDocs tds;
			tds = indexsearcher.search(query, 20);
			ScoreDoc[] sds= tds.scoreDocs;
			for(ScoreDoc sd:sds){
				Document d;
				d = indexsearcher.doc(sd.doc);
				sb.append(d.get("filename")+"["+d.get("path")+"]");
			}
			indexreader.close();
		} catch (IOException e4) {
			// TODO Auto-generated catch block
			e4.printStackTrace();
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return sb;		
	}

}  

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值