比如 我以“test”作为搜索条件,结果查出3条数据
我又以“test1”作为搜索条件,结果查询出5条数据
不明白为什么是出现这种情况。
public static void createCom() {
LuceneDB lucene = new LuceneDB();
IndexWriter writer = null;
PreparedStatement ps = null;
ResultSet rs = null;
Connection conn = lucene.getConnection();
long startQueryTime = new Date().getTime();
String sql = "SELECT company_name,address,lxr FROM COMPANY_IMPORT3";
try {
System.out.println("开始查询...");
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
System.out.println("查询完成...");
long endQueryTime = new Date().getTime();
System.out.println("查询用时: " + (endQueryTime - startQueryTime));
long startTime = new Date().getTime();
writer = new IndexWriter(fille,analyzer, true, IndexWriter.MaxFieldLength.LIMITED);
while(rs.next()){
Document doc = new Document();
//为字段 sname 建索引
String company_name = Tools.removeNull(rs.getString("ADDRESS"));
String address = Tools.removeNull(rs.getString("ADDRESS"));
String lxr = Tools.removeNull(rs.getString("LXR"));
doc.add(new Field("company_name",company_name,Field.Store.YES,Field.Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS));
doc.add(new Field("address",address,Field.Store.YES,Field.Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS));
doc.add(new Field("lxr",lxr,Field.Store.YES,Field.Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS));
writer.addDocument(doc);
}
long endTime = new Date().getTime();
System.out.println("创建索引,用时: " + (endTime - startTime) + " 毫秒!,索引存放位置:" + fille);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
DBHelper.closeResultset(rs,conn);
writer.optimize();//索引优化
if(writer!=null){
writer.close(); //关闭读写器
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static String QueryCom(String QueryString) {
String[] fields = {"address","address","lxr"};
JSONArray json = null;
List list = null;
Query query;
try {
Directory dir = FSDirectory.getDirectory(fille);
IndexSearcher searcher = new IndexSearcher(dir);
BooleanClause.Occur[] flags = new BooleanClause.Occur[] {BooleanClause.Occur.MUST};
query = MultiFieldQueryParser.parse(QueryString, fields, flags, analyzer);
TopDocs topDocs = searcher.search(query, 10);
list = new ArrayList();
int num = 0;
for(ScoreDoc scoreDoc : topDocs.scoreDocs){
num++;
Map<String,Object> map = new IgnoreKeyCaseMap<Object>();
int DocId = scoreDoc.doc;
Document doc = searcher.doc(DocId);
String str= "";
String com_name = doc.get("company_name");
String address = doc.get("address");
String lxr = doc.get("lxr");
map.put("name", com_name);
list.add(map);
}
System.out.println("========="+num);
json = JSONArray.fromObject(list);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(json == null)return "";
return json.toString();
}
test和test1是两个单词,查询test1不会包含test的结果。不存在什么父子条件。
你在google搜索 search,难道返回的结果包含 research,甚至 researching 么?