通过前面的学习我们知道,除了使用 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