全文搜索-介绍-elasticsearch-definitive-guide翻译
2016-03-09 20:59
417 查看
全文搜索
我们通过前文的简单样例,已经了解了结构化数据的条件搜索;如今。让我们来了解全文搜索-- 如何通过匹配全部域的文本找到最相关的文章。关于全文搜索有两个最重要的方面:相似度计算通过TF/IDF (see [relevance-intro]),地理位置接近算法。模糊相似度算法或者其它算法,用来给给定查询条件的结果排序。
文本分析
通过把文本分割和归一化后的词元。去(a)生成倒排索引,或者去(b)查询倒排索引。当我们在讨论相似度计算和文本分析的时候,我们仅仅是在讨论查询。而不是过滤
词条搜索 vs. 全文搜索
即使全部的查询都要运行一些相似度排序,可是不是全部的查询条件都须要文本分析。 由于有些特殊的查询就不是在文本上运行的,列如bool和
function_score。
它们是boolean查询和数值查询。文本查询能够分为两个种类:词条查询低级别的
term和
fuzzy查询没有文本分析,它们仅仅是在单个词条上查询。列如词条
"Foo"的
term查询,
是在倒排索引种查找全然匹配的词条,然后给每一篇包括这个词条的文章做TF/IDF相似度打分。记住:词条
"Foo"的
term查询仅仅是在倒排索引里查找全然匹配的词条,它不会匹配到
"foo"或者
"FOO"。
当你在
not_analyzed的域用
["Foo","Bar"]生成索引。或者在用
whitespace分析器的域用
"Foo Bar"生成索引。 它们都会在倒排索引里生成两个词元
"Foo"和
"Bar"。全文查询高级别的
match和
query_string查询可以理解这些域的映射:
* 假设在
date和
integer属性的域,查询文本会被当日期或者整数来对待。* 假设在(
not_analyzed)属性的文本域,查询文本会被当做一个词条来查询。 * 可是,假设在(
analyzed)属性的文本域,查询文本会用恰当得分析器去产生词条。而这些词条都会被用来查询。一旦查询得到这些词条。它就用适当的低级查询去运行每个词条,然后用查询结果计算每一篇文章的相似度打分。我们将在后面的章节中具体介绍这个过程。通常。你差点儿都不会直接用到基于词元的查询,很多其它的,你会用更方便的高级全文查询(事实上内部是用基于词元的查询)当你想在
not_analyzed域查询全然匹配值的时候,你应该考虑一下你究竟是用查询还是过滤。 由于单词条查询通常被表示为二元值
yes|
no,所以过滤能更好的表达它们。你能从这里收益的 filter
caching:
GET /_search { "query": { "filtered": { "filter": { "term": { "gender": "female" } } } } }
博客已搬家原文链接:http://www.callmer.com/?p=43
相关文章推荐
- 【POJ 1699】 Best Sequence(KMP+状压DP)
- UITextField
- LeetCode95—Unique Binary Search Trees II
- leetcode 95. Unique Binary Search Trees II | Java最短代码实现
- iOS 图片压缩UIImage方法扩展
- POJ 2478-Farey Sequence(欧拉函数)
- 删除算法3 unique 将连续相同的数删除
- Volley 自定义XMLRequest和GSONRequest
- UITableView 编辑状态(删除、添加、移动)
- 303. Range Sum Query - Immutable
- 232. Implement Queue using Stacks
- ugui在运行时改变RectTransform的大小
- Equipment uva1508
- 使用命令行build Xcode工程
- UIUITableView头部图片拉伸放大效果
- UI学习第09天
- [转载]request.getServletPath()方法
- UGUI_界面拖动和焦点界面
- HDU-1242-Rescue(优先队列+BFS)
- Leetcode 303. Range Sum Query - Immutabled