我们在做数据系统的时候,经常会用到模糊搜索,但是,数据库提供的模糊搜索并不具备按照相关度进行排序的功能。现在提供一个比较两个字符串相似度的方法。通过计算出两个字符串的相似度,就可以通过Linq在内存中对数据进行排序和筛选,选出和目标字符串最相似的一个结果。本次所用到的相似度计算公式是 相似度=Kq*...
分类:
其他好文 时间:
2014-12-28 01:42:10
阅读次数:
135
本章翻译自Elasticsearch官方指南的Controlling
Relevance一章。
根据过滤子集来提升(Boosting Filtered Subsets)
回到在忽略TF/IDF(Ignoring TF/IDF)中处理的那个问题,我们需要根据每个度假酒店拥有的卖点数量来对它们的相关度分值进行计算。我们希望利用缓存的过滤器来影响分值,而function_...
分类:
其他好文 时间:
2014-12-28 00:34:32
阅读次数:
323
本章翻译自Elasticsearch官方指南的Controlling
Relevance一章。
function_score查询
function_score查询是处理分值计算过程的终极工具。它让你能够对所有匹配了主查询的每份文档调用一个函数来调整甚至是完全替换原来的_score。
实际上,你可以通过设置过滤器来将查询得到的结果分成若干个子集,然后对每个子集使...
分类:
其他好文 时间:
2014-12-28 00:34:04
阅读次数:
341
本章翻译自Elasticsearch官方指南的Controlling
Relevance一章。
忽略TF/IDF
有时我们不需要TF/IDF。我们想知道的只是一个特定的单词是否出现在了字段中。比如我们正在搜索度假酒店,希望它拥有的卖点越多越好:
WiFi花园(Garden)泳池(Pool)
而关于度假酒店的文档类似下面这样:
{ "descript...
分类:
其他好文 时间:
2014-12-26 01:02:19
阅读次数:
342
本章翻译自Elasticsearch官方指南的Controlling
Relevance一章。
通过查询结构调整相关度
ES提供的查询DSL是相当灵活的。你可以通过将单独的查询子句在查询层次中上下移动来让它更重要/更不重要。比如,下面的查询:
quick OR brown OR red OR fox
我们可以使用一个bool查询,对所有词条一视同仁:...
分类:
其他好文 时间:
2014-12-25 01:30:42
阅读次数:
251
本章翻译自Elasticsearch官方指南的Controlling
Relevance一章。
Lucene中的Practical Scoring Function
对于多词条查询(Multiterm Queries),Lucene使用的是布尔模型(Boolean
Model),TF/IDF以及向量空间模型(Vector
Space Model)来将它们结合...
分类:
Web程序 时间:
2014-12-24 11:53:03
阅读次数:
273
本章翻译自Elasticsearch官方指南的Controlling Relevance一章。
控制相关度(Controlling Relevance)
对于仅处理结构化数据(比如日期,数值和字符枚举值)的数据库,它们只需要检查一份文档(在关系数据库中是一行)是否匹配查询即可。
尽管布尔类型的YES|NO匹配也是全文搜索的一个必要组成,它们本身是不够的。我们还需要...
分类:
其他好文 时间:
2014-12-23 10:32:51
阅读次数:
216
多值字段(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
多字段搜索(Multifield Search)
本文翻译自官方指南的Multifield Search一章。
查询很少是只拥有一个match查询子句的查询。我们经常需要对一个或者多个字段使用相同或者不同的查询字符串进行搜索,这意味着我们需要将多个查询子句和它们得到的相关度分值以一种有意义的方式进行合并。
也许我们正在寻找一本名为战争与和平的书,它的作者是Leo Tolstoy。...
分类:
其他好文 时间:
2014-12-08 10:46:57
阅读次数:
302