常州企业如何有效进行营销型网站推广以提升网站流量和维护?
摘要:企业营销型网站推广方法,常州网站建设方案维护,网站建设需要匹配人员,网站建设任务和标准自动完成与搜索功能不同 - 我们应该在用户键入下一个字符后立即更新自动完成选项,每秒都会访问数据库&#xff
企业营销型网站推广方法,常州网站建设方案维护,网站建设需要匹配人员,网站建设任务和标准自动完成与搜索功能不同 - 我们应该在用户键入下一个字符后立即更新自动完成选项#xff0c;每秒都会访问数据库#xff0c;过滤数百万条记录#xff0c;而不会导致任何性能下降#xff01;
Elasticsearch 是一种可以轻松实现此类功能的技术#xff0c;它是一种基于 Apac…
自动完成与搜索功能不同 - 我们应该在用户键入下一个字符后立即更新自动完成选项每秒都会访问数据库过滤数百万条记录而不会导致任何性能下降
Elasticsearch 是一种可以轻松实现此类功能的技术它是一种基于 Apache Lucene 库构建的搜索和分析引擎。 Elasticsearch 具有分布式、多租户架构具有内置路由和重新平衡功能使其易于扩展。 它是一种广泛使用的数据存储用于存储、搜索和分析大量数据。
在这个由三部分组成的博客文章系列中我将详细介绍如何使用 Elasticsearch 中提供的各种选项来实现自动完成功能。 在第一部分即这篇文章中我们将讨论前缀查询 - prefix queries。 在第二部分中我们将了解 n-grams在最后部分中我们将讨论 complete suggesters。
出于示例目的我们将使用存储电影数据的索引。 为了简单起见title 将是该索引中唯一存在的属性。 由于 Elasticsearch 为其操作公开了 REST 接口因此你可以使用任何基于 REST 的工具与其进行通信。
本系列假设你对 Elasticsearch 有基本的了解。 如果你是 Elasticsearch 的新手我强烈建议你阅读 “Elastic开发者上手指南”。
那么让我们开始吧 前缀查询 - Prefix queries
前缀查询是 Elasticsearch 中自动完成实现的最简单形式。 我们在存储字段时不做任何特殊的事情大部分工作都是在查询时完成的。 该字段被索引存储为一个简单的文本/关键字字段并且允许我们根据传递的前缀匹配文档的查询用于查询它。
让我们创建一个索引来运行前缀查询
PUT /movies
{mappings: {properties: {title: {type: keyword,fields: {analyzed_title: {type: text}}}}}
}
创建索引时我们需要提供映射指示我们打算存储的数据类型。 出于以下示例的目的title 被映射为 keyword 字段也被映射为支持全文查询的文本字段。 使用 Elasticsearch 的多字段功能可以将一个字段映射为多种类型。
keyword 字段和 text 字段之间的主要区别在于关键字字段不被分析即我们传递到关键字字段的数据按原样存储。 对文本字段进行分析即分词化、可能进行转换例如小写、词干等并存储在倒排索引中。 倒排索引是一种数据结构用于存储从术语到它们出现的文档位置的映射从而实现高效的全文搜索。有关 keyword 和 text 类型的区别请详细参阅文档 “ElasticsearchText vs. Keyword - 它们之间的差异以及它们的行为方式”。
为了测试如何分析我们的数据我们可以使用 _analyze API。 让我们看看我们的主标题字段将如何分析
GET /movies/_analyze
{text: Chamber of Secrets,field: title
}
上面命令的响应为
{tokens: [{token: Chamber of Secrets,start_offset: 0,end_offset: 18,type: word,position: 0}]
}
因此它只返回一个 token。 为什么 没错就是因为它是关键字字段 让我们测试一下我们 analyzed_title 的表现
GET /movies/_analyze
{text: Chamber of Secrets,field: title.analyzed_title
}
上面命令的响应为
{tokens: [{token: chamber,start_offset: 0,end_offset: 7,type: ALPHANUM,position: 0},{token: of,start_offset: 8,end_offset: 10,type: ALPHANUM,position: 1},{token: secrets,start_offset: 11,end_offset: 18,type: ALPHANUM,position: 2}]
}
正如所料它被分解为三个 token。 此外token 是小写的。
