[Solr] 短语查询及关键字定位

 通过前面的学习我们知道,除了使用 Luncene 索引进行关键字查询之外,还可以在 Solr 中使用短语进行查询。回忆一下,索引中只包含了独立的关键字,那么,对短语进行查询是如何工作的呢?

简单说来,在短语中的每个关键字依旧独立地使用 Lucene 索引进行查询,例如查询 new home,那么将会使用 “new home” 来提交查询。如果 new 和 home 这两个关键字查询出了相同的文档,那么就会使用“关键字定位”(term positions) 这样的功能,关键字定位是指关键字出现在文档中的位置,这是一个可选的记录。下面的表格演示了关键字定位。上表是原始文档,下表是关键字对应的文档,以及关键字所对应在文档中的定位:

原始文档
文档编号 内容字段
1 A Fun Guide to Cooking
2 Decorating Your Home
3 How to Raise a Child
4 Buying a New Car
5 Buying a New Home
6 The Beginner’s Guide to Buying a House
7 Purchasing a Home
8 Becoming a New Home owner
8 How to Buy Your First House
Lucene 反向索引附带关键字定位
关键字 文档编号 关键字定位
a 1 1
3 4
4 2
cooking 1 5
decorating 2 1
your 2 2
9 4
home 2 3
5 4
7 3
8 4
new 4 3
5 3
8 3
Car 4 4
The 6 1
Beginner’s 6 2
House 6 7
9 6
Purchasing 7 1

从上表中可以看到查询 new AND home 的结果包含了文档 5 和 8。下一步就要用到关键字定位的功能,它将告诉我们关键字出现在文档的什么位置。下表提供了一个简化的版本,让我们的关注点放到查询出来的文档上:

关键字 文档编号 关键字定位
home 5 4
8 4
new 5 3
8 3

在这个例子中可以看到,查询出来的两个文档中,new 关键字都是出现在位置 3,home 关键字都是出现在位置 4。这是合理的,因为匹配出来的两本书的书名分别是 Buying a New Home 和 Becoming a New Home Owner。通过确保关键字在文档中彼此出现的位置,Solr 就可以确认关键字在原始文档中组成的短语。这样,通过关键字定位这样的功能就可以实现短语查询。

http://www.tuicool.com/articles/jqQJrm