`
韩悠悠
  • 浏览: 826971 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

solr in action翻译-第三章Solr的关键概念 3.2

    博客分类:
  • solr
 
阅读更多

 

转载请声明出处,谢谢。翻译也很辛苦 

 

 

3.1.4term、短语和布尔逻辑

现在我们所看到的内容是什么样子在Lucene的反向索引,让我们跳进如何查询的机制能够利用这个索引来查找匹配文档。在本节中,我们将复习的基础知识查找术语和短语的反向搜索索引,利用布尔逻辑来增强这些和模糊查询查找功能。回顾book-searching的例子,让我们看一个简单的查询新房子,如图3.2中描述的。

 

 

3.2。简单的搜索查询的细微差别而展示解释



 

 

你看到在上一节,所有的文本在内容字段分成term时插入到Lucene索引。现在有一个传入的查询,你需要从几个选项中选择查询索引:

寻找两个不同的term ,new house ,要求这两个都匹配

寻找两个不同的term ,new house,要求只有一个匹配

寻找“new house”确切的词

 

所有这些选项都是完全有效的方法取决于你的用例,且多亏了Solr的强大的查询功能,使用Lucene,他们很容易使用布尔逻辑完成。

 

必需的条件

让我们看看第一个选项,将查询分解成多个term和要求他们所有的匹配。有两个相同的方式写这个查询使用默认查询在Solr解析器:

+new +house

new AND house

这两个逻辑上相同,事实上,第二个例子解析和最终减少到第一个例子。+符号是一元运算符意味着查询的一部分后立即应在任何存在文档匹配;和关键字是一个二元运算符,意味着的一部分查询马上前,紧跟着它的查询的一部分这两个要求。

 

优化term

相比之下,Solr还支持或二进制运算符,这意味着前查询的一部分,或者查询的一部分后它是必需的存在于任何文档匹配。默认情况下,Solr还配置了治疗的任何部分查询没有一个明确的操作符作为一个可选的参数,使下面的也是相同的:

new house

new OR house

否定方面

除了使部分查询可选的或必需的,也有可能需要他们不存在于任何匹配的文档通过下面的等价的查询:

new house –rental

new house NOT rental

在这些查询,没有文档,包含这个词租赁将返回, 文档匹配newhouse

Solr的默认操作符

在缺省配置Solr假设本身就是一个词或短语可选的词,这是可配置的每个查询的基础上使用op URL参数与许多Solr的查询处理程序。

/select/?q=new house&q.op=ORversus /select?q=new house&q.op=AND

 

注意,如果您更改默认OR AND operator,这将转向要求所有条trem定没有明确的布尔操作符。如果默认操作符或查询新房子,然后只有一个条件是必需的。如果默认的操作符和相同的查询,那么新term和房子都是必需的。你也可以显式地指定operator之间的term(如新和家庭或新或家)来覆盖默认的操作符。

短语

Solr不仅支持搜索单一条件;它还可以搜索短语,确保多个词汇顺序出现:

"new home" OR "new house"

"3 bedrooms" AND "walk in closet" AND "granite countertops"

分组表达式

除了前面的查询表达式,最后一个Solr的基本逻辑结构支持分组的术语、短语和其他查询表达式。Solr查询语法可以代表任意复杂的查询通过分组条件使用括号,比如下面的例子:

New AND (house OR (home NOT improvement NOT depot NOT grown))

(+(buying purchasing -renting) +(home house residence –(+property -bedroom)))

使用所需的条件,可选term,否定,并分组表达式提供了一组功能强大且灵活的查询功能,允许任意复杂

对搜索索引查找操作,下一节我们将看到。

3.1.5. Finding sets of documents

基本了解的术语中,短语,和布尔查询,我们现在可以深入到底如何能够使用Solr的内部Lucene反向索引匹配的文件。记得书的索引表3.5,这是的一部分复制在表3.6

 

3.6。书名的集合反向索引术语

 



 
如果客户现在传入查询是new home,Solr究竟是如何能够找到文档匹配查询,因为前面的反向索引?

 

 

 

答案是,查询的new hometwo terms查询(有一个默认的操作符new home之间,记得吗?)。这样,这两个条件必须单独抬起头在Lucene索引:

 

Term

Document

Home

2,5,7,8

new

4,5,8

一旦找到匹配的文档列表为每个术语,Lucene将执行操作到达一个适当的最终的结果集相匹配的查询。假设默认操作符是一个OR ,这个查询将导致一个结果集的联盟而言,在维恩图如图3.3

 

 



 
同样,如果查询newhome或者默认操作符被设置为AND,然后结果方面都将被计算5只返回一个结果集的文档和文档,如图3.4所示。

 



 

 

3.1.6。短语查询和词的位置

我们之前看到的,除了Lucene索引查询的条件,它是可能的查询Solr短语。回忆,index仅包含单个 term,然而,您可能想知道如何寻找完整的短语。

3.1.7。模糊匹配

预先不总是可以知道任何给定的搜索在Solr索引将会被发现,所以Solr提供执行fuzzy-matching的几种类型的能力查询。模糊匹配被定义为执行不精确的匹配条件的能力搜索索引。例如,有人可能想要搜索开始的任何单词特定的前缀(称为通配符搜索),可能想找到拼写变体在一个或两个字符(称为模糊搜索和编辑距离搜索),或可能想要互相匹配的最大距离在一定范围内的两个术语(称为接近搜索)。用例中多种类型的术语或短语整个文档搜索,查询可能存在这些fuzzy-matching功能作为一个强大的工具。

 

在本节中,我们将探讨Solr多个模糊匹配查询功能,包括通配符搜索、搜索范围edit-distance搜索和邻近搜索。

通配符搜索

最常见的一种形式的模糊匹配Solr是使用通配符。假设你想找到任何文件从字母office开始。就是一种方式创建一个查询,枚举所有可能的变化:

Query: office OR officer OR official OR officiate OR ...

要求这个单词列表变为查询可以是不合理的客户期望,甚至为你代表你的客户。

因为所有的变化可以匹配Solr索引中已经存在,您可以使用星号(*)通配符来执行同样的功能:

Query: offi* Matches office, officer, official, and so on

除了匹配的术语,可以使用通配符的内部搜索词,比如如果你想匹配官和提供:

Query: off*r Matches offer, officer, officiator, and so on

星号通配符(*)一词匹配零个或多个字符。如果你想匹配只有一个字符,可以使用问号(?)的目的:

Query: off?r Matches offer, but not officer

领先的通配符

虽然Solr的通配符功能相当强大,它可以是昂贵的执行某些通配符查询。每当一个通配符搜索被执行,所有的条款反向索引匹配的部分术语之前必须找到第一个通配符。然后,每个候选人的条件必须检查,以查看它们是否匹配通配符在查询模式。因此,您所指定的多个字符的开始这个词在通配符之前,查询应该运行得越快。例如,查询engineer*不会昂贵的(因为它匹配反向索引中的一些术语),但是查询e *将是昂贵的,因为它匹配所有条款开头字母e

 

执行一个通配符查询是一项昂贵的操作。如果您需要匹配结束term的结束 (like caring, liking, and smiling),例如,这可能会引发重大性能问题。

Query: *ing

 

如果你需要能够使用这些主要搜索通配符,更快的解决方案存在,但它需要额外的配置。解决方案是通过添加ReversedWildcardFilterFactory字段类型的链(配置文本分析第六章将讨论处理)

 

ReversedWildcardFilterFactory作品double-inserting Solr索引内容index(每个term一次文本,一旦逆转文本的每个词):

 

当提交一个查询的主要通配符* ing,Solr知道搜索逆转的版本,绕过相关的性能问题领导通配符搜索将自身改造为标准通配符搜索了内容。

 

但是请注意,把这个功能需要dual-indexing Solr的所有term已经索引,增加索引的大小和减缓整体搜索。这个功能不建议除非是需要在你的搜索应用程序。

最后一个重要的一点需要注意通配符搜索是通配符为了工作对个人搜索条件,而不是短语搜索,

下面的例子:

Works: softwar* eng?neering

Does not work: "softwar* eng?neering"

 

如果您需要执行通配符搜索的能力在一个短语,你要存储整个短语的索引作为一个词,你应该感到舒适的做在第6章末尾。

 

范围搜索

Solr还提供了搜索的能力方面,已知值之间。这可以是有用的,当你想要寻找一个特定的文档子集在下降的范围内。例如,如果你只是想匹配文档中创建六个月在201222日到, 201282, ,您可以执行以下搜索:

Query: created:[2012-02-01T00:00.0Z TO 2012-08-02T00:00.0Z]

这个范围查询格式也适用于其他字段类型:

Query: yearsOld:[18 TO 21] Matches 18, 19, 20, 21

Query: title:[boat TO boulder] Matches boat, boil, book, boulder, etc.

Query: price:[12.99 TO 14.99] Matches 12.99, 13.000009, 14.99, etc.

 

这些范围查询周围方括号的范围,这是包容性范围的语法。Solr还支持独家通过使用搜索范围花括号:

Query: yearsOld:{18 TO 21} 匹配 19 and 20 but not 18 or 21

 

尽管它可能看起来奇怪的语法,Solr还提供混合和匹配的能力包容性和排他的界限:

Query: yearsOld:[18 TO 21} Matches 18, 19, 20, but not 21

 

虽然范围搜索执行慢于在单个词的搜索,他们提供的巨大的灵活性寻找文档匹配的动态定义组值,躺在一个特定范围内的Solr索引。注意,是很重要的term范围查询的排序是:它们被发现的顺序Solr索引,这是一个按字母顺序。如果你想创建一个文本字段包含整数,整数会发现按照以下顺序:1,11,111,

12013日等。在Solr数值类型,至少我们会建议在未来的人章,弥补通过索引的内容在一个特殊的方式,但它的一定要明白,Solr索引内的排序顺序取决于如何领域内的数据处理的时候写入Solr索引。我们会潜水深入这种内容分析在章节56

模糊/ edit-distance搜索

对于许多搜索应用程序,重要的是不仅要匹配客户的文本,但也允许的灵活性处理正确拼写错误,甚至轻微的变化拼写。Solr提供了使用edit-distance处理角色变化的能力基于Damerau-Levenshtein测量距离,占比人类所有的拼写错误的80%

Solr达到这些模糊edit-distance搜索通过使用波浪号(~)字符如下:

Query: administrator~ Matches: adminstrator, administrater, administratior, and so forth

 

这个查询匹配原始术语(administrator)和其他内部条件两个编辑距离最初的术语。一个编辑距离的定义是一个插入,删除、替换或换位的字符。这一术语administrator失踪第六的位置)中的是一个编辑距离administrator因为它一个字符删除。同样的术语sadministrator将编辑距离因为它有一个插入(前缀的“s”),和术语administratro也会有一个编辑距离,因为它转置最后两个字(“变成了反渗透”)

 

还可以修改edit-distance搜索允许的严格匹配的与任何编辑距离:

Query: administrator~1 Matches within one edit distance.

Query: administrator~2 Matches within two edit distances. (This is the default if

no edit distance is provided.)

Query: administrator~N Matches within N edit distances.

请注意,任何编辑距离要求以上两个将变得越来越慢并将更有可能匹配意想不到的条款。词搜索的编辑距离使用一个有效的执行一个或两个Levenshtein自动机,但将回落慢edit-distance实现编辑距离两个以上。

接近搜索

在前一节中,我们看到了编辑距离可以用来发现术语接近原始的术语,但不是完全相同的。这edit-distance原则是在一个术语适用之外寻找替代字符;它还可以被应用条件变化之间的短语。

 

假设你想要搜索一个Solr索引的员工档案管理人员在你的公司。方法之一就是列举的每一个可能的

执行官标题在你的公司:

Query: "chief executive officer" OR "chief financial officer" OR "chief marketing officer" OR "chief technology officer" OR ...

 

当然,这假设您知道所有可能的冠军你搜索在其他公司,这是不现实的,不了解或如果你有一个更有挑战性的用例。另一种可能的策略是寻找每个术语独立:

Query: chief AND officer

 

这应该与所有可能的用例,但它也将匹配任何文档包含这两个词在文档的任何地方。一个有问题的例子是一个文档,其中包含文字:一个主要事件是引发的担忧值班警察的安全。本文档显然是一个糟糕的比赛对于我们的用例,但它和类似的糟糕的比赛将会返回给前面的查询。

值得庆幸的是,Solr提供了一个基本的解决这个问题:邻近搜索。在前一个例子,一个好的战略是让Solr带回所有的文档包含术语词附近的term。这可以通过以下示例查询:

Query: "chief officer"~1

o Meaning: chief and officer must be a maximum of one position away.

o Examples: "chief executive officer", "chief financial officer"

Query: "chief officer"~2

o Meaning: chief and officer must be a maximum of two edit distances away.

o Examples: "chief business development officer", "officer chief"

Query: "chief officer"~N

o Meaning: Finds chief within N positions of officer.

 

前面的近似搜索可以看作是草率版本的传统说法搜索。事实上,一个精确的短语搜索首席发展官很容易重写为首席发展官”~ 0。这些查询将产生相同的结果,因为零的编辑距离的定义准确短语搜索。这两个机制利用这个词位置存储在Solr索引(我们讨论3.1.6)来计算编辑距离。还应该指出的是,Solr接近搜索不是一个真正的编辑距离,因为它要求所有指定的使用term存在,而真正的编辑距离也会允许替换和删除(正如您所看到的模糊搜索一个词)

 

 

编辑距离的一般原则仍然适用于任期接近查询然而,关于术语插入和互换。沿着这条线,你可能也注意到,它要求一个短语污水2指定(“首席官”~ 2)为了官首席匹配的文本。这是因为第一个编辑首席和移动官到相同的位置,第二个编辑是首席移动一个位置前官。这再次强调了邻近搜索不使用的事实真正的编辑距离(换位只能算一个编辑),而是问:“有多少职位可以集体为了添加到文档的文本为接近指定形式的短语搜索?”

 

 

 

  • 大小: 7.3 KB
  • 大小: 24.9 KB
  • 大小: 24.4 KB
  • 大小: 18.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics