2010-01-05 传智播客—luncene/compass (二)(转载)

2024-04-08 14:18

本文主要是介绍2010-01-05 传智播客—luncene/compass (二)(转载),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如果大家对文章内容有不理解的地方,尽情留言或QQ(1357208561) 讨论。让大家共同进步。

                                                                                                                                                                                                                                                                                               ————tigers20010

 

 

 

3.排序(默认相关度排序)

a)          实验相关度排序,得分是在搜索时算出来的。

b)         影响区域

i.           整个文档

ii.          某个字段

1.          建立索引时,影响它的排名,创建QueryParser时指定“MultiFieldQueryParser(String[] fields, Analyzer analyzer, Map boosts)”中第三个参数为“new HashMap<String, Float>().put(String fieldname, float fraction)”提升对应字段内容的排名。一般网站内部搜索会将标题部分的内容提升,以至于标题内容的排名大于帖子内容或回复的排名。

2.          搜索时,标题与内容的含量排名,TopDoc有一个score属性,它是根据文档中关键字的数量,记录文档的得分。

c)   按指定的字段进行排序,就是在搜索时,指定的字段。

d)   Sort排序器,由类Sort实现。

Sort sort = new Sort();

sort.setSort(SortField field);

indexSearcher.search(query, null, 100, sort);

 

4.过滤器

在查询时添加一个过滤器,过滤掉查询后不想要的内容,由Filter接口实现。

String lower = NumberTools.longToString(3);

String upper = NumberTools.longToString(6);

Filter filter = new RangeFilter("id", lower, upper, true, false);

indexSearcher.search(query, filter, 100);

lucene中使用数值、日期数据时,必须使用NumberToolsDateTools。前后必须统一,比如使用longToStringLong转换为String,那么也必须使用stringToLongString转换为Long

 

5.搜索,Query的子类对应各种查询:

1)         TermQuery,关键词查询:

Term term = new Term("context", "加油");

Query query = new TermQuery(term);

indexSearcher.search(query, null, 100);

2)         RangeQuery,范围查询:

Term lower = new Term("content", NumberTools.longToString(3));

Term upper = new Term("content", NumberTools.longToString(10));

Query query = new RangeQuery(lower, upper, false/*包含边界*/);

indexSearcher.search(query, null, 100);

3)         WildcardQuery,通配符查询:

Term term = new Term("context", "?");//?匹配任意一个字符,*代表任意多个字符。

Query query = new TermQuery(term);

indexSearcher.search(query, null, 100);

indexSearcher.search(query, null, 100);

4)         PhraseQuery,短语查询:

PhraseQuery phraseQuery = new PhraseQuery();

phraseQuery.add(new Term("context", "中国人民"));

phraseQuery.add(new Term("context", "加油"));

phraseQuery.setSlop(5); // 指定关键词之间间隔的字符的最大数量

indexSearcher.search(query, null, 100);

5)         BooleanQuery,布尔查询:

Query query1 = new TermQuery(new Term("context", "中国人民"));

Query query2 = new TermQuery(new Term("context", "加油"));

BooleanQuery boolQuery = new BooleanQuery();

boolQuery.add(query1, Occur.MUST);

boolQuery.add(query2, Occur.SHOULD);//Occur的常量值:MUSTSHOULDMUST_NOT

indexSearcher.search(query, null, 100);

注意:经过分词器的所有字母,无论是添加索引还是查询,都会被转换为小写的。但上边这些查询类没有经过分词器,如果查询关键里有大写字母,将查询不到匹配的结果。所以在使用上边这些查询类时,查询文本中的字母全部为小写。我们之前使用的查询是通过QueryParser切分出查询关键字,所以使用QueryParser可以不注意大小写问题。

二、Compass

Compasslucene的框架,它与hibernate极其相似(但不具有hibernate那些高级功能,比如缓存技术)。汤兄弟做的好,因为学习lucene之前的课程正是hibernate,他将hibernatecompass对比了一下,使我们学习compass更加容易了。OK,我总结一下。

1.hibernatecompass

 
 

 

 
 

 

 


hibernate

compass

配置方式

1.编程方式:

  Configuation cfg = new Configu...();

  cfg.set...();

  ...

2.配置文件:

  //默认配置,文件名为“hibernate.cfg.xml

  Configuation cfg= new Configu...();

//指定文件名(文件名可变更)

//cfg.configure("hibernate.cfg.xml");

1.编程方式:

  CompassConfiguation cfg = new CompassConf...();

  cfg.set("key","value");

  ...

2.配置文件

  //默认配置,文件名为“compass.cfg.xml

  cfg.configure();

  //指定文件名(文件名可变更)

  cfg.configure("hibernate.cfg.xml");

配置文件

XML文件

注解

XML文件

注解

 

2.compass中的注解配置

package cn.itcast.cc.compass;

 

import org.compass.annotations.Index;

import org.compass.annotations.Searchable;

import org.compass.annotations.SearchableId;

import org.compass.annotations.SearchableProperty;

import org.compass.annotations.Store;

 

@Searchable

public class Article {

    private Long id;

    private String title;

    private String content;

    @SearchableId

    public Long getId() { return id;}

    @SearchableProperty(store = Store.YES, index = Index.ANALYZED, boost = 2.0F, excludeFromAll = ExcludeFromAll.YES/*这个属性的内容被查询忽略*/)

    public String getTitle() {return title;}

    @SearchableProperty(store = Store.YES, index = Index.ANALYZED)

    public String getContent() {return content;}

    public void setId(Long id) {this.id = id;}

    public void setTitle(String title) {this.title = title;}

    public void setContent(String content) {this.content = content;}

}

XML配置文件,可以查看“compass-2.2.0-M2/docs/reference/html_single/index.html”手册,内容较多。

3.compassAPI

CompassConfiguration cfg = new CompassConfiguration();

cfg.setConnection("./indexPath/");// 连接信息

cfg.addClass(Article.class);// 声明映射信息

Compass compassSessionFactory = cfg.buildCompass();

CompassTransaction tx = session.beginTransaction();

session.create(article);

tx.commit();

session.close();

其他API

session.find(String arg0);

session.save(Object arg0);

session.delete(Class arg0, Object arg1);

这篇关于2010-01-05 传智播客—luncene/compass (二)(转载)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/885823

相关文章

hdu 2602 and poj 3624(01背包)

01背包的模板题。 hdu2602代码: #include<stdio.h>#include<string.h>const int MaxN = 1001;int max(int a, int b){return a > b ? a : b;}int w[MaxN];int v[MaxN];int dp[MaxN];int main(){int T;int N, V;s

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi

集中式版本控制与分布式版本控制——Git 学习笔记01

什么是版本控制 如果你用 Microsoft Word 写过东西,那你八成会有这样的经历: 想删除一段文字,又怕将来这段文字有用,怎么办呢?有一个办法,先把当前文件“另存为”一个文件,然后继续改,改到某个程度,再“另存为”一个文件。就这样改着、存着……最后你的 Word 文档变成了这样: 过了几天,你想找回被删除的文字,但是已经记不清保存在哪个文件了,只能挨个去找。真麻烦,眼睛都花了。看

01 Docker概念和部署

目录 1.1 Docker 概述 1.1.1 Docker 的优势 1.1.2 镜像 1.1.3 容器 1.1.4 仓库 1.2 安装 Docker 1.2.1 配置和安装依赖环境 1.3镜像操作 1.3.1 搜索镜像 1.3.2 获取镜像 1.3.3 查看镜像 1.3.4 给镜像重命名 1.3.5 存储,载入镜像和删除镜像 1.4 Doecker容器操作 1.4

提问的智慧(转载)

此文让我受益良多。值得一读,大家如果也觉得不错就一起来推~~~   ---------------------------------      在黑客世界里,当提出一个技术问题时,你能得到怎样的回答?这取决于挖出答案的难度,同样取决于你提问的方法。本指南旨在帮助你提高发问技巧,以获取你最想要的答案。       首先你必须明白,黑客们只偏爱艰巨的任务,或者能激发他们

Struts2常用标签总结--转载

Struts2常用标签总结 一 介绍 1.Struts2的作用 Struts2标签库提供了主题、模板支持,极大地简化了视图页面的编写,而且,struts2的主题、模板都提供了很好的扩展性。实现了更好的代码复用。Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求。 Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于

C++入门(05-2)从命令行执行C++编译器_GCC

文章目录 GCC编译器1. 下载MinGW-w64,安装(不推荐)2. 使用MSYS2安装MinGW-w64(推荐)2.1 安装MSYS22.2 初始化和更新2.3 安装MinGW-w64编译器2.3 在MSYS2 Shell中导航到代码目录2.4 使用 g++ 编译2.5 运行可执行文件 GCC编译器 GCC(GNU Compiler Collection)是一个开源编译器集

C++入门(05)从命令行执行C++编译器_MSVC

文章目录 1.C++ 编译器2. 常用 C++ 编译器MSVC(Microsoft Visual C++)GCC(GNU Compiler Collection)Clang 3. MSVC 编译器3.1 开发者命令提示符3.2 编译 C++ 代码 1.C++ 编译器 将C++源代码(扩展名为 .cpp )转换成计算机可以运行的可执行程序 编译器会检查代码的语法和语义,生成相应

龙芯+FreeRTOS+LVGL实战笔记(新)——05部署主按钮

本专栏是笔者另一个专栏《龙芯+RT-Thread+LVGL实战笔记》的姊妹篇,主要的区别在于实时操作系统的不同,章节的安排和任务的推进保持一致,并对源码做了改进和优化,各位可以先到本人主页下去浏览另一专栏的博客列表(目前已撰写36篇,图1所示),再决定是否订阅。此外,也可以前往本人在B站的视频合集(图2所示)观看所有演示视频,合集首个视频链接为: 借助RT-Thread和LVGL

【转载】ACM感悟

今天看了一篇我们学校前辈的ACM的感悟,觉得写的十分有道理,这里转载,文章还会不断的改进和更新。 原文链接:http://www.cnblogs.com/Chierush/p/3760870.html?ADUIN=1339764596&ADSESSION=1401536826&ADTAG=CLIENT.QQ.5329_.0&ADPUBNO=26349 声明:本文是写给弱校ACM新手的一点