WuKong 全文搜索引擎。功能特性:
高效索引和搜索(1M条微博500M数据28秒索引完,1.65毫秒搜索响应时间,19K搜索QPS)
支持中文分词(使用sego分词包并发分词,速度27MB/秒)
支持计算关键词在文本中的紧邻距离(token proximity)
支持计算BM25相关度
支持持久存储
可实现分布式索引和搜索
采用对商业应用友好的Apache License v2发布
示例代码:
package main import ( "github.com/huichen/wukong/engine" "github.com/huichen/wukong/types" "log" ) var ( // searcher是协程安全的 searcher = engine.Engine{} ) func main() { // 初始化 searcher.Init(types.EngineInitOptions{ SegmenterDictionaries: "github.com/huichen/wukong/data/dictionary.txt"}) defer searcher.Close() // 将文档加入索引 searcher.IndexDocument(0, types.DocumentIndexData{Content: "此次百度收购将成中国互联网最大并购"}) searcher.IndexDocument(1, types.DocumentIndexData{Content: "百度宣布拟全资收购91无线业务"}) searcher.IndexDocument(2, types.DocumentIndexData{Content: "百度是中国最大的搜索引擎"}) // 等待索引刷新完毕 searcher.FlushIndex() // 搜索输出格式见types.SearchResponse结构体 log.Print(searcher.Search(types.SearchRequest{Text:"百度中国"})) }
在es的维护中少不了要重启节点,毕竟重启可以解决80%的问题,那么你知道怎么正确的重启es节点么? es版本 6.5.4 1、禁用分片分配 执行下面的配置,就可以禁用分片分配 PUT _cluster/settings { "persistent": { "cluster.routing.allocation.enable": "none" } } 我们在重启es的时候一定要知道
一、Elasticsearch节点类型 1、master node节点 整个集群的管理者、索引管理、分片管理,以及整个集群的状态的管理,master节点是从master候选节点中选出的,成为master候选节点的方式:node.master:true 默认(true) data node:数据节点,存储主要数据,负责索引的数据的检索和聚合等操作,设置data node的方式如下: node.mas
转自:http://blog.codeg.cn/2016/02/02/wukong-source-code-reading/ 搜索过程分析 下面我们来分析一下搜索的过程。首先构造一个SearchRequest对象。一般情况下只需提供SearchRequest.Text即可。 type SearchRequest struct { // 搜索的短语(必须是UTF-8格式),会被分词 // 当值为空字
转自:http://blog.codeg.cn/2016/02/02/wukong-source-code-reading/ 索引过程分析 下面我们来分析索引过程。 // 将文档加入索引 // // 输入参数: // docId标识文档编号,必须唯一 //data见DocumentIndexData注释 // // 注意: // 1. 这个函数是线程安全的,请尽可能并发调用以提高索引速度 // 2
ES的基本常识 关于ES的基本了解,相信大家学习ES都是带着目的来学习,也了解学习ES是为了做什么的,下面只简单说下ES与Lucene的关系。 首先Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库(框架)但是想要使用Lucene,必须使用Java来作为开发语言并将其直接集成到你的应用中,并且Lucene的配置及使用非常复杂,你需要深入了解检索的相关知识来理解它是如
一、概述 Elasticsearch,简称为 ES, ES 是一个开源的高扩展的分布式全文搜索引擎,同时也是面向文档型数据库,在ES中一条数据就是一个文档。在学习ES之前需要先了解一些概念: Index(索引):不同于Mysql的索引,ES中的索引相当于Mysql的数据库,当我们向ES插入数据的时候,需要指定要插入到哪个索引之下。 Document(文档):ES中存储的就是一条条文档,ES可以通过
本文主要介绍Elasticsearch与springboot结合应用 一、新建项目并添加依赖 <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.9.0</versio
回顾 在前面的章节(分页),我们已经加强了数据库查询,因此能够在页面上获取各种查询。 今天,我们会继续探讨数据库的话题,只是领域不同。所有存储内容的应用程序必须提供搜索能力。 许多其它类型的网站可能使用了谷歌、必应等索引所有的内容并且提供查询结果。这个对于大多数静态页面的网站,像论坛,是很好用。我们应用程序 microblog 的基本单元是用户短小的 blog,不是整个页面。我们希望搜索结果是动态
问题内容: 我尝试在elasticsearchJava API上使用正则表达式运行全文搜索。我的过滤器是这样的: 但是它只与一个单词匹配,而没有短语匹配。我的意思是,例如: 如果soruce中有一个字符串,例如:“ ”,而当我的文本字符串如下:“ ”,“ ”,“ ” …时,它就起作用了。 但是,当我的realTimeTextIn字符串为“ ”时,全文搜索将不起作用。我搜索的单词不能超过一个。 我在
我尝试在弹性搜索java api上使用正则表达式运行全文搜索。我的过滤器是这样的: 但是它只与一个单词匹配,而不是与短语匹配。我的意思是,例如: 如果soruce中有一个字符串,如:“
问题内容: 我正在建立Django网站,并且正在寻找搜索引擎。 一些候选人: Lucene / Lucene与指南针/ Solr 狮身人面像 PostgreSQL内置全文本搜索 MySQl内置全文本搜索 选择标准: 结果相关性和排名 搜索和索引速度 易于使用,易于与Django集成 资源需求-网站将托管在VPS上,因此理想情况下,搜索引擎不需要大量的RAM和CPU 可扩展性 其他功能,例如“您的意
我正在使用node.js连接到neo4j数据库。每当我必须为一个节点设置索引时,我都会通过转到neo4j浏览器(localhost:7474)来手动完成。 我构建了自己的nodejs适配器来连接到neo4j,因此目前我只能访问密码查询。要创建索引,我只能访问cypher或浏览器(7474)。那么创建自动全文索引的正确方法是什么,最好是从浏览器本身创建?我如何使用密码访问它(或者我必须访问它?neo
问题内容: 我想在我的网页中进行全文搜索。我需要分页进行搜索。我的数据库每张表有50,000+行。我已经改变了我的表,并使其成为索引。该表始终处于更新状态,仍然有一个自动增加的列。而最新的总是在表格的末尾。 但整个查询时间将花费。我通过Google搜索了许多文章,有的文章写道,只有限制字段字长才能帮助更快地进行搜索。但作为一种类型,它会像这样改变一定的长度(我尝试过标题TEXT(500) CHAR
问题内容: 这是我测试过的。 这是create语句。 等号和“赞”效果很好。所以为什么? 问题答案: 全文搜索需要多种多样的方式来消除重复的“噪音”。用最少的数据进行测试将产生较差的结果。将您的整个收藏集投入其中,以获取有意义的内容。如以下某些链接所示,甚至可以尝试搜索最小字数的设置。 停用词 有各种语言的停用词 MySql 列表,这些词表示在搜索过程中忽略的无关紧要的词。该列表已编译到服务器中,
问题内容: 我正在将所有站点代码从使用mysql_ *函数转换为PDO。对于我的需求,PDO上的PHP文档尚不清楚。它为您提供了要使用的功能,但没有详细介绍它们在不同情况下的功能。 基本上,我有一个mysql全文搜索: 实际的语句要长得多,但这基本上就是它的作用。 我的问题是,如何将其纳入PDO? 我知道您不是要在位置标记周围使用引号,那么您是否将它们放在AGAINST()函数中?我包括他们吗?如