提高性能
短语和邻近度查询比简单的match查询在性能上更昂贵。match查询只是查看词条是否存在于倒排索引(Inverted Index)中,而match_phrase查询则需要计算和比较多个可能重复词条(Multiple possibly repeated)的位置。
在Lucene Nightly Benchmarks中,显示了一个简单的term查询比一个短语查询快大概10倍,比一...
分类:
其他好文 时间:
2014-12-17 12:54:34
阅读次数:
290
多值字段(Multivalue Fields)
在多值字段上使用短语匹配会产生古怪的行为:
PUT /my_index/groups/1
{
"names": [ "John Abraham", "Lincoln Smith"]
}
运行一个针对Abraham Lincoln的短语查询:
GET /my_index/groups/_search
{
"q...
分类:
其他好文 时间:
2014-12-16 10:04:15
阅读次数:
236
本文翻译自Elasticsearch官方指南的Proximity Matching一章。
邻近匹配(Proximity Matching)
使用了TF/IDF的标准全文搜索将文档,或者至少文档中的每个字段,视作"一大袋的单词"(Big bag of Words)。match查询能够告诉我们这个袋子中是否包含了我们的搜索词条,但是这只是一个方面。它不能告诉我们关于单词间关...
分类:
其他好文 时间:
2014-12-15 12:11:17
阅读次数:
205
下午,计划2个小时搞定,个人官网第6次升级,就可以干点轻松的事了,结果,下午多搞了2个小时,晚上又搞了2个小时,才搞定。 最后一个世界难题是,URL传递中文参数。 问题大致是这么出现的:我为“博客雷观” 这个栏目,增加了“全文搜索”功能,用lucene实现的。因此,需要传递中文参数。搜索框表单提交,传递中文,很简单就搞定了。 搜索之后的分页url,需要带上当前的“搜索词” ,比如“...
自定义_all字段
在元数据:_all字段中,我们解释了特殊的_all字段会将其它所有字段中的值作为一个大字符串进行索引。尽管将所有字段的值作为一个字段进行索引并不是非常灵活。如果有一个自定义的_all字段用来索引人名,另外一个自定义的_all字段用来索引地址就更好了。
ES通过字段映射中的copy_to参数向我们提供了这一功能:
PUT /my_index
{
"m...
分类:
其他好文 时间:
2014-12-12 10:12:29
阅读次数:
205
以字段为中心的查询(Field-centric Queries)
上述提到的三个问题都来源于most_fields是以字段为中心(Field-centric),而不是以词条为中心(Term-centric):它会查询最多匹配的字段(Most matching fields),而我们真正感兴趣的最匹配的词条(Most matching terms)。
NOTE
best_fields同...
分类:
其他好文 时间:
2014-12-11 10:26:13
阅读次数:
312
跨字段实体搜索(Cross-fields Entity Search)
现在让我们看看一个常见的模式:跨字段实体搜索。类似person,product或者address这样的实体,它们的信息会分散到多个字段中。我们或许有一个person实体被索引如下:
{
"firstname": "Peter",
"lastname": "Smith"
}
而addr...
分类:
其他好文 时间:
2014-12-11 10:25:02
阅读次数:
232
multi_match查询
multi_match查询提供了一个简便的方法用来对多个字段执行相同的查询。
NOTE
存在几种类型的multi_match查询,其中的3种正好和在"了解你的数据"一节中提到的几种类型相同:best_fields,most_fields以及cross_fields。
默认情况下,该查询以best_fields类型执行,它会为每个字段生成一...
分类:
其他好文 时间:
2014-12-10 10:51:19
阅读次数:
315
多字段搜索(Multifield Search)
本文翻译自官方指南的Multifield Search一章。
查询很少是只拥有一个match查询子句的查询。我们经常需要对一个或者多个字段使用相同或者不同的查询字符串进行搜索,这意味着我们需要将多个查询子句和它们得到的相关度分值以一种有意义的方式进行合并。
也许我们正在寻找一本名为战争与和平的书,它的作者是Leo Tolstoy。...
分类:
其他好文 时间:
2014-12-08 10:46:57
阅读次数:
302
控制分析(Controlling Analysis)
查询只能摘到真实存在于倒排索引(Inverted Index)中的词条(Term),因此确保相同的分析过程会被适用于文档的索引阶段和搜索阶段的查询字符串是很重要的,这样才能够让查询中的词条能够和倒排索引中的词条匹配。
尽管我们说的是文档(Document),解析器(Analyzer)是因字段而异的(Determined per Fi...
分类:
其他好文 时间:
2014-12-06 11:27:30
阅读次数:
319