全文检索到了compass
来源:互联网 发布:sqlserver 小计 编辑:程序博客网 时间:2024/05/02 04:15
因为项目中,需要全文检索,于是用到了compass,第一次用到这个东西、一头雾水,经过简单测试得到如下结论:
@Override
public List<Book> searchBooks(String queryString) {
List<Book> books = new ArrayList<Book>();
Compass compass = compassTemplate.getCompass();
CompassSession session = compass.openSession();
//CompassTransaction tx = session.beginLocalTransaction();
//System.out.println(queryString);
/*
* 查询任意个属性
* */
// CompassQueryBuilder queryBuilder=session.queryBuilder();
// CompassBooleanQueryBuilder boolQuery=queryBuilder.bool();
// boolQuery.addShould(queryBuilder.queryString("author:"+queryString).toQuery());
// boolQuery.addShould(queryBuilder.queryString("content:"+queryString).toQuery());
// CompassHits hits = boolQuery.toQuery().hits();
//
/*
* 查询一个属性
*
*/
//CompassHits hits = session.queryBuilder().queryString("content:"+queryString).toQuery().hits();
//System.out.println("length:"+hits.length());
/*
* 查询所有属性
*
*/
CompassHits hits = session.queryBuilder().queryString(queryString).toQuery().hits();
for(int i=0;i<hits.length();i++){
Book book = (Book)hits.data(i);
books.add(book);
}
//tx.commit();
return books;
}
参考资料:
CompassQueryBuilder queryBuilder=session.queryBuilder();
CompassBooleanQueryBuilder boolQuery=queryBuilder.bool();
//必须匹配
boolQuery.addMust(queryBuilder.queryString(type+":"+queryString).toQuery());
//必须不匹配
boolQuery.addMustNot(queryBuilder.queryString(type+":"+queryString).toQuery());
//或者匹配 也许没有
boolQuery.addShould(queryBuilder.queryString(type+":"+queryString).toQuery());
假如 Book 对象还有很多其它的属性, 现在要求页面输入的关键字只在 title 和 desc 中查询,
我使用
queryBuilder.bool() //
.addShould(queryBuilder.term("title", keywords)) //
.addShould(queryBuilder.term("desc", keywords)) //
.toQuery();
这样有一个问题:
关键字 "技术 实践", 不会匹配 "核心技术最佳实践"
使用
queryBuilder.queryString(keywords)
.toQuery();
这样才可以, 不过这样就是查询所有的属性了
-----------------------------------------------------------------------------------------------------------------------------------
session.queryBuilder()返回CompassQueryBuilder的对象,再调用queryString来查询搜索字串。可这个构造字串就有学问了:“titleIndex:学习”表示指明字段名搜索,如果想指明多个字段呢可以用空格和“+”隔开如:“titleIndex:学习 +contentIndex:第”
注意:查询字串里的标识不是对象的属性,而是对象的属性映射成索引的名字,这个是可以在Article.cmp.xml里看到的。还有就是一定要在两个搜索内容之间加空格要不然什么都搜不到。
addSort就是对搜索出的结果按一定的顺序排序。
Hits()呢就是返回hits结果集吧。
最后用个for循环利用hits.data(i)将结果遍历输出。
- 全文检索到了compass
- 全文检索compass
- 全文检索引擎- Compass
- 全文检索 Compass 配置使用
- 全文检索 Compass 配置使用
- compass+全文检索+多条件检索
- struts2+spring+hibernate+compass 实现全文检索
- 全文检索Lucene(四)---Compass框架
- 使用compass+lucene实现简单的全文检索功能
- 重拾Compass:全文检索Lucene的最佳伴侣
- 搜索引擎——全文检索Compass(一)
- 全文检索
- 全文检索
- 全文检索
- 全文检索
- 全文检索
- 全文检索
- 全文检索
- 一步一步学Linq to sql系列文章
- libEvent在vs2005中的配置
- 如何将QString转换为char *或者相反
- 【树状DP】ural 1018
- POJ1469 二分图极度基础题
- 全文检索到了compass
- 宏定义中的#,##
- 测试基础(一)测试的定位
- ubuntu更新源
- 求助(关于自定义函数位置的问题)
- Logcat 使用之-在程序中记录
- firefox 9 a1 中文版下载
- PHP之五,循环语句
- MSP430下TB产生两路PWM波的操作