![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
搜索引擎
温水的小青蛙2023
躺平后的崛起,不知不觉成了温水中青蛙,现在想要努力的跳出去
展开
-
搜索引擎——知识梳理
1.输入框1.1输入的搜索条件可以自动补全按照词被搜索的频率进行排序用户在输入搜索关键词时,根据已经输入的部分,自动提示出后面可能需要输入的词,既减少了用户输入的劳动量,也可以提示用户当前有哪些备选,有效的降低输错的几率,提升搜索的体验。(例子:汉字提示的功能,从User Log中提取出每天搜索频率最高的词,和这些词命中的搜索结果数,更新到服务器中,然后提供补全提示功能。数据每天凌原创 2015-05-15 14:56:48 · 1010 阅读 · 0 评论 -
ElasticSearch——setting部分不存储某个字段
setting中的通用属性Store该属性的取值可以为yes和no,用于指定字段的原始属性是否存入索引。默认值是no.意味着不能在结果中返回字段的原始值(即使没有存储原始值,也可以使用Soure字段返回原始值)。如果已经建立索引可以搜索该字段的内容。ElasticSearch默认是存储整个文件的,如果要改变这种情形的话可以设置:“_source”:{"enable":"false"}P原创 2016-03-04 17:29:45 · 8103 阅读 · 1 评论 -
[ElasticsSearch] 排序(一)
排序是定义在字段级别的,可以通过定义根据特定字段的内容来规定排序规则{ "sort" : [ { "post_date" : {"order" : "asc"}}, ------定义在字段级别排序的多种方式 "user", { "name" : "desc" }, { "age" : "desc" },原创 2015-08-31 14:14:16 · 2258 阅读 · 2 评论 -
[Elasticsearch] 数据建模 - 处理关联关系(2)
字段折叠(Field Collapsing)一个常见的需求是通过对某个特定的字段分组来展现搜索结果。我们或许希望通过对用户名分组来返回最相关的博文。对用户名分组意味着我们需要使用到terms聚合。为了对用户的全名进行分组,name字段需要有not_analyzed的原始值,如聚合和分析中解释的那样。PUT /my_index/_mapping/blogpost{ "propert转载 2015-08-31 14:22:19 · 1236 阅读 · 0 评论 -
[Elasticsearch] 数据建模 - 处理关联关系(1)
数据建模(Modeling Your Data)ES是一头不同寻常的野兽,尤其是当你来自SQL的世界时。它拥有很多优势:性能,可扩展性,准实时的搜索,以及对大数据的分析能力。并且,它很容易上手!只需要下载就能够开始使用它了。但是它也不是魔法。为了更好的利用ES,你需要了解它从而让它能够满足你的需求。在ES中,处理实体之间的关系并不像关系型存储那样明显。在关系数据库中的黄金准转载 2015-08-31 14:19:51 · 1061 阅读 · 2 评论 -
[ElasticSearch] 空间搜索 (二)
空间搜索在聚合中的使用直接上代码: "aggs": { "aggs_geopoint": { "geo_distance": { "field": "location", "origin": { "lat": 51.5072222, "lon": -0.1275 },原创 2015-08-26 15:32:12 · 3634 阅读 · 3 评论 -
[ElasticSearch] 空间搜索 (一)
根据索引文档的地理坐标来进行搜索,Elasticsearch 也能够处理这样的搜索。——空间搜索一、为空间搜索准备映射PUT my_space_test{ "mappings": { "poi": { "properties": { "name": { "type": "string" }, "l原创 2015-08-12 17:17:33 · 8050 阅读 · 3 评论 -
[Elasticsearch] 控制相关度 (六) - function_score查询中的filter,functions及random_score参数
根据过滤子集来提升(Boosting Filtered Subsets)回到在忽略TF/IDF(Ignoring TF/IDF)中处理的那个问题,我们需要根据每个度假酒店拥有的卖点数量来对它们的相关度分值进行计算。我们希望利用缓存的过滤器来影响分值,而function_score则正好可以实现该目标。在目前的例子中,我们为所有的文档都使用了一个函数。现在我们希望使用过滤器将翻译 2015-07-15 17:24:31 · 1922 阅读 · 0 评论 -
[Elasticsearch] 控制相关度 (二) - Lucene中的PSF(Practical Scoring Function)与查询期间提升
Lucene中的Practical Scoring Function对于多词条查询(Multiterm Queries),Lucene使用的是布尔模型(Boolean Model),TF/IDF以及向量空间模型(Vector Space Model)来将它们结合在一起,用来收集匹配的文档和对它们进行分值计算。像下面这样的多词条查询:GET /my_index翻译 2015-07-15 17:18:13 · 845 阅读 · 0 评论 -
[Elasticsearch] 部分匹配 (三) - 查询期间的即时搜索
查询期间的即时搜索(Query-time Search-as-you-type)现在让我们来看看前缀匹配能够如何帮助全文搜索。用户已经习惯于在完成输入之前就看到搜索结果了 - 这被称为即时搜索(Instant Search, 或者Search-as-you-type)。这不仅让用户能够在更短的时间内看到搜索结果,也能够引导他们得到真实存在于我们的索引中的结果。比如,如果用户翻译 2015-07-15 17:14:04 · 1063 阅读 · 0 评论 -
[Elasticsearch] 部分匹配 (二) - 通配符及正则表达式查询
通配符和正则表达式查询wildcard查询和prefix查询类似,也是一个基于词条的低级别查询。但是它能够让你指定一个模式(Pattern),而不是一个前缀(Prefix)。它使用标准的shell通配符:?用来匹配任意字符,*用来匹配零个或者多个字符。以下查询能够匹配包含W1F 7HW和W2F 8HW的文档:GET /my_index/address/_search翻译 2015-07-15 17:13:08 · 3904 阅读 · 0 评论 -
[Elasticsearch] 控制相关度 (四) - 忽略TF/IDF
忽略TF/IDF有时我们不需要TF/IDF。我们想知道的只是一个特定的单词是否出现在了字段中。比如我们正在搜索度假酒店,希望它拥有的卖点越多越好:WiFi花园(Garden)泳池(Pool)而关于度假酒店的文档类似下面这样:{ "description": "A delightful four-bedroomed house with ... " }翻译 2015-07-15 17:20:27 · 1685 阅读 · 0 评论 -
[Elasticsearch] 控制相关度 (五) - function_score查询及field_value_factor,boost_mode,max_mode参数
function_score查询function_score查询是处理分值计算过程的终极工具。它让你能够对所有匹配了主查询的每份文档调用一个函数来调整甚至是完全替换原来的_score。实际上,你可以通过设置过滤器来将查询得到的结果分成若干个子集,然后对每个子集使用不同的函数。这样你就能够同时得益于:高效的分值计算以及可缓存的过滤器。它拥有几种预先定义好了的函数:翻译 2015-07-15 17:23:49 · 853 阅读 · 0 评论 -
[Elasticsearch] 控制相关度 (三) - 通过查询结构调整相关度以及boosting查询
通过查询结构调整相关度ES提供的查询DSL是相当灵活的。你可以通过将单独的查询子句在查询层次中上下移动来让它更重要/更不重要。比如,下面的查询:quick OR brown OR red OR fox我们可以使用一个bool查询,对所有词条一视同仁:GET /_search{ "query": { "bool": { "sh翻译 2015-07-15 17:19:31 · 662 阅读 · 0 评论 -
[Elasticsearch] 控制相关度 (一) - 相关度分值计算背后的理论
控制相关度(Controlling Relevance)对于仅处理结构化数据(比如日期,数值和字符枚举值)的数据库,它们只需要检查一份文档(在关系数据库中是一行)是否匹配查询即可。尽管布尔类型的YES|NO匹配也是全文搜索的一个必要组成,它们本身是不够的。我们还需要知道每份文档和查询之间的相关程度。全文搜索引擎不仅要找到匹配的文档,还需要根据相关度对它们进行排序。全翻译 2015-07-15 17:17:05 · 989 阅读 · 0 评论 -
[Elasticsearch] 部分匹配 (一) - 前缀查询
部分匹配(Partial Matching)敏锐的读者可能已经发现到目前为止,介绍的查询都是在整个词条层面进行操作的。匹配的最小单元必须是一个词条。你只能找到存在于倒排索引(Inverted Index)中的词条。但是如果你想匹配词条的一部分,而不是整个词条呢?部分匹配(Partial Matching)允许用户指定词条的一部分然后找到含有该部分的任何单词。匹配词条一部分这翻译 2015-07-15 17:12:09 · 1314 阅读 · 0 评论 -
[Elasticsearch] 部分匹配 (四) - 索引期间优化ngrams及索引期间的即时搜索
索引期间的优化(Index-time Optimizations)目前我们讨论的所有方案都是在查询期间的。它们不需要任何特殊的映射或者索引模式(Indexing Patterns);它们只是简单地工作在已经存在于索引中的数据之上。查询期间的灵活性是有代价的:搜索性能。有时,将这些代价放到查询之外的地方是有价值的。在一个实时的Web应用中,一个额外的100毫秒的延迟会难以承受翻译 2015-07-15 17:15:48 · 934 阅读 · 0 评论 -
搜索引擎——匹配方式
规则:按照搜索条件,在标题、内容进行匹配,匹配结果进行分页且按照匹配结果的得分和创建时间进行排序。SQL 语句:select between 0 to 9 * from CNews where title^2 match '北京^5000^0 大学^5000^2' or content match '北京^5000^0 大学^5000^2' order by time desc,原创 2015-05-29 15:41:15 · 1956 阅读 · 0 评论 -
ElasticSearch——自定义排序
GET _search{ "_source": { "include": ["title.Value","dataType","_score"] }, "query": { "bool": { "should": [ { "query_string": { "default_field": "t原创 2016-03-09 18:28:30 · 27327 阅读 · 3 评论