`
crazycat03
  • 浏览: 175540 次
  • 性别: Icon_minigender_2
  • 来自: 呼和浩特
社区版块
存档分类
最新评论

Compass---Search Engine (1)

阅读更多

Compass核心提供了一个Lucene搜索引擎之上的提取层。Compass也提供了很多Lucene之上的特征,就像两阶段事务管理,快速更新和优化器。当尝试去解释Compass是怎么与搜索引擎合作时,首先我们需要去理解搜索引擎域模型。

一 Alias,Resource 和 Property
Resouce代表一组property。你可以把它想成是一个虚拟的文档--大量数据,就像一个网页,一个电子邮件信息,或者是一个Author对象的序列化。一个Resource总是与一个Alias关联并且多个Resources可以用同一个Alias。Alias扮演着Resource与它的映射定义(OSEM/XSEM/RSEM)之间的连接。一个Property只是一个名称和值(键值对)的占位。Resource里的一个Property代表着一些种类元数据,它们与Resource关联就像作者姓名。
    每个Resource关联着一个或更多的id属性。它们对于Compass管理加载基于id和Resource更新的Resource是必须的。id属性或者明确定义在RSEM中或者隐含在OSEM/XSEM定义中。

对于Lucene用户来说,Compass的Resource对应lucene Document,compass的Property对应Lucene的Field。

1 使用Resource/Property
当工作在RSEM下,resources但当你的最初数据模型。它们用于构建可搜索内容,也操纵它。当执行一次搜索,resources用于显示搜索结果。
另一个resource可以使用的重要位置,经常被忽略的,是与OSEM/XSEM。当通过使用应用域模型或xml数据结构操作搜索内容时,resources很少被使用。当执行搜索操作时它们可以被使用。基于你的映射定义,通过resources和Property用一种非定制方式可以进入语义模型。
让我们使用一个例子来简单化这些语句。如果我们的应用有两个对象类型,处方和成分,我们能够同时将处方标题和成分标题映射到同一个语义元数据名称,标题(title,Resource Property 名称)。这将允许我们在搜索显示搜索结果时只在Resource级别,提出属性标题(title)的值从资源列表返回的。
 二 分析器

    分析器是输入文本预处理组件。它们也用于搜索时(搜索串需要用同一种方式处理)。然而,在索引和搜索时使用同一个分析器通常是重要的。

    Analyzer是一个lucene类(限定org.apache.lucene.analysis.Analyzer类)。Lucene核心伴随着很多分析器,并且你可以配置Compass与他们中的任何一个配合。如果我们以下面的句子为例“The quick brown fox jumped over the lazy dogs”,我们来看不同的分析器是如何处理的:
whitespace (org.apache.lucene.analysis.WhitespaceAnalyzer):
[The] [quick] [brown] [fox] [jumped] [over] [the] [lazy] [dogs]
simple (org.apache.lucene.analysis.SimpleAnalyzer):
[the] [quick] [brown] [fox] [jumped] [over] [the] [lazy] [dogs]
stop (org.apache.lucene.analysis.StopAnalyzer):
[quick] [brown] [fox] [jumped] [over] [lazy] [dogs]
standard (org.apache.lucene.analysis.standard.StandardAnalyzer):
[quick] [brown] [fox] [jumped] [over] [lazy] [dogs]
Lucene也伴随着一个扩展库,支持很多分析器实现(包括语言指定分析器)。Compass也可以和他们所有的配置合作。

1 配置分析器

一个Compass实例担当着分析器的注册处,因为每个分析器都绑定着一个查找名。Compass里的两个内部分析器名是:default和search. 当没有配置其他分析器时default就用于默认的分析器(使用不同分析器的配置通常在映射定义时通过指向一个不同的分析器查找名完成的)。当没有配置其他分析器时search分析器用在搜索查询字符串上(当执行一个基于通过查询构建器接口的查询字符串的搜索时配置一个不同的分析器时完成的)。默认情况下,当什么都没用配置时,Compass将使用Lucene标准分析器作为默认分析器。

下面是一个配置两个分析器的例子,一个将取代default分析器,另一个通过myAnalyzer注册(可能稍后被引用到不同的映射定义中)。

<compass name="default">
<connection>
<file path="target/test-index" />
</connection>
<searchEngine>
<analyzer name="deault" type="Snowball" snowballType="Lovins">
<stopWords>
<stopWord value="no" />
</stopWords>
</analyzer>
<analyzer name="myAnalyzer" type="Standard" />
</searchEngine>
</compass>

 

 

Compass也支持Lucene分析器的自定义实现(注:可以实现分析器filter完成同样的目标,稍后介绍),如果实现类也实现了CompassConfigurable,其他设置(参数)能够通过配置文件注入它。
这里有一个配置例子,注册一个能接受一个名为threshold的参数自定义分析器实现类:

<compass name="default">
<connection>
<file path="target/test-index" />
</connection>
<searchEngine>
<analyzer name="deault" type="CustomAnalyzer" analyzerClass="eg.MyAnalyzer">
<setting name="threshold">5</setting>
</analyzer>
</searchEngine>
</compass>

  

 

2 分析器过滤器(Analyzer Filter)

过滤器是为分析流的其他过滤提供简单地支持,与创建你自己的分析器没有冲突。同样,过滤器能够在不同的分析器之间共享,潜在地含有不同的分析器类型。
    一个自定义过滤器实现需要实现Compass的LuceneAnalyzerTokenFilterProvider类,它只有一个创建Lucene TokenFilter的方法。过滤器也是以一个名字登记,然后可以再分析器配置里指向它们。下面的例子时候配置两个分析器过滤器,应用到default分析器上:

<compass name="default">
<connection>
<file path="target/test-index" />
</connection>
<searchEngine>
<analyzer name="deafult" type="Standard" filters="test1, test2" />
<analyzerFilter name="test1" type="eg.AnalyzerTokenFilterProvider1">
<setting name="param1" value="value1" />
</analyzerFilter>
<analyzerFilter name="test2" type="eg.AnalyzerTokenFilterProvider2">
<setting name="paramX" value="valueY" />
</analyzerFilter>
</searchEngine>
</compass>

 

 

3 处理同义字
由于同义词是一个搜索应用程序的共同要求,Compass带有一个简单的同义词分析器过滤器:
SynonymAnalyzerTokenFilterProvider.它的实现要求作为一个SynonymLookupProvider执行的参数,能够返回所给值的所有同义词。没有提供实现,但是可以定位到一个公开的同义词数据库,或一个文件输入结构的简单实现。下面是如何配置的例子:

<compass name="default">
<connection>
<file path="target/test-index" />
</connection>
<searchEngine>
<analyzer name="deafult" type="Standard" filters="synonymFilter" />
<analyzerFilter name="synonymFilter" type="synonym">
<setting name="lookup" value="eg.MySynonymLookupProvider" />
</analyzerFilter>
</searchEngine>
</compass>

 

 

注意:实际上我们没有为type设置全限定类名。这是Compass提供的一个简单化实现(自然地,你可以仍然使用同义词象征过滤器提供者的全限定类名)。

三 类似处Similarity
Compass能够使用Lucene的Similarity类为索引和搜索进行配置。这是高级配置级别。默认情况下,Lucene的DefaultSimilarity用于搜索和索引。

为了全面转变Similarity,Similarity的类型可以使用compass.engine.similarity.default.type来设置。type的值可以是Similarity实现类的真正的类名,也可以使SimilarityFactory实现类的类名。为了用CompassSettings注入,它们都可以选择性地实现CompassConfigurable接口。
 特别指出的是,索引Similarity可以使用compass.engine.similarity.index.type设置。搜索Similarity可以使用compass.engine.similarity.search.type来设置。

分享到:
评论

相关推荐

    compass-reference.pdf

    ### OSEM - Object/Search Engine Mapping #### Searchable Classes 可搜索类是Compass中的核心概念,它们定义了哪些类的对象应该被索引,并提供了元数据描述如何进行索引。 综上所述,Compass不仅是一个简单的...

    基于Luncene的compass框架详解-java

    3. **OSEM (Object Search Engine Mapping)**: OSEM是一种通过XML配置文件将POJOs(Plain Old Java Objects)映射到搜索引擎的技术,它使得对象与搜索引擎之间的交互更加直观和高效。 三、Compass框架的使用流程 ...

    Compass技术文档

    - **OSEM**:OSEM (Object Search Engine Mapping) 是Compass提供的一个核心概念,它通过XML配置文件定义了如何将普通的Java对象(POJOs)映射到搜索引擎中。这极大地简化了对象与搜索引擎之间的交互过程。 #### 三...

    compass入门指南

    - `.cpm.xml`:实现Object/Search Engine Mapping,即如何将POJO映射到common metadata。 - `.cfg.xml`:配置Compass的Index存储位置、分词策略等。 #### Compass核心API详解 Compass的核心API设计受到了...

    整合compass2.0 spring hibernate示例源程序

    同时,可以利用Spring的`HibernateTemplate`或`JdbcTemplate`来执行数据库操作,而Compass的`SearchEngine`接口则用于执行搜索查询。 总结来说,这个示例项目是一个完整的Java应用框架,展示了如何优雅地集成...

    COMPASS介绍

    COMPASS是一个强大的搜索引擎框架,它通过OSEM(Object/Search Engine Mapping)技术实现了应用对象的领域模型与搜索引擎之间的映射。相较于其他搜索引擎框架如Hibernate Search,COMPASS在某些方面展现出了更高的...

    基于Java的Luncene的compass框架说明使用技术文档.pdf

    - **OSEM**:对象搜索引擎映射(Object Search Engine Mapping),通过XML配置文件提供了POJOs(Plain Old Java Objects)到搜索引擎的映射。 #### 三、下载地址 Compass框架及相关jar包可以从官方网站...

    compass 笔记

    3. **对象关系映射 (ORM)**:支持多种 ORM 技术,如 OSEM(Object-Search Engine Mapping)、XSEM(XML-Search Engine Mapping)、RSEM(Relational-Search Engine Mapping),使得开发者能够在不修改现有业务逻辑的...

    compass包及相关学习资料

    Compass是一个强大的,事务的,高性能的对象/搜索引擎映射(OSEM:object/search engine mapping)与一个Java持久层框架.内容包括compass的jar包及从网上搜集的相关学习资料. 附两个不错的资料地址: ...

    compass实例zip

    Compass是一个强大的,事务的,高性能的对象/搜索引擎映射(OSEM:object/search engine mapping)与一个Java持久层框架.Compass包括: * 搜索引擎抽象层(使用Lucene搜索引荐), * OSEM (Object/Search Engine Mapping) ...

    COMPASS+spring构建自己的搜索引擎.pdf

    1. **Object/Search Engine Mapping (OSEM)**: OSEM是Compass的核心特性,它允许我们将Java对象模型直接映射到搜索引擎,类似于Hibernate的ORM功能。这样,我们可以通过对象来操作搜索引擎中的数据。 2. **配置方式...

    基于Jakarta Lucene的LIUS索引框架---下载不扣分,回帖加1分,欢迎下载,童叟无欺

    Compass is a first class open source Java Search Engine Framework, enabling the power of Search Engine semantics to your application stack decoratively. Built on top of the amazing Lucene Search ...

    基于JavaLuncene的compass框架说明使用技术文档.doc

    OSEM(Object Search Engine Mapping)是 Compass 提供的一种配置方式,通过 XML 文件将 Java 对象(POJOs)映射到搜索引擎。这种方式使得开发者可以方便地将业务对象与搜索索引关联起来,实现数据的双向同步。 四...

    search-engine

    欢迎使用由 Francky、Pierre 和 Yohann 编写的旧版 D'lul 搜索引擎要使用它,您需要: 从可执行文件 .jar,或从带有源 .java 文件的树结构一个 stop.txt 停用词文件(在 .jar 旁边) 一个 config.ini 文件(在 .jar ...

    sense-search-components

    这些组件可以与Qlik Sense Capability API,Engine API(与Enigma.js或qsocks)一起使用,也可以单独使用。 以下是快速入门指南,有关更多详细信息,请参见 。 如果您认为有任何遗漏,请告诉我。入门要将Sense ...

    luceneappengine:该项目提供了一个目录,可用于构建由Lucene和Google App Engine驱动的应用程序

    该项目提供了一个目录,可用于构建Lucene和Google App Engine支持的应用程序。 现场演示: 在运行中查看它()或检查 主要特点: LAE 4.4.x与Lucene 8.2.x,8.3.x,8.4.x,8.5.x兼容 LAE 4.3.x与Lucene 8.1.x...

    Building.Your.Next.Big.Thing.with.Google.Cloud.Platform.1484210050

    Using this book as your compass, you can navigate your way through the Google Cloud Platform and turn your ideas into reality. The authors, both Google Developer Experts in Google Cloud Platform, ...

    java源码包---java 源码 大量 实例

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写的一款...

Global site tag (gtag.js) - Google Analytics