标签:elasticsearch

发表于
由于我们把ghost导入elasticsearch的时候,生成的id号是随机数。 结果导致搜索结果的顺序是随机的,很不好看。 我们先看一看mapping结构: curl -XGET http://yi.zapto.org:12530/posts/_mapping?pretty=on { "posts" : { "mappings" : { "post" : { "_all" : { "analyzer" : "ik_max_word" }, "properties" : { "content" : { "type" : "string", "boost" : 8.0, "term_vector" : "with_positions_offsets", "analyzer" : "ik_max_word", "include_in_all" : true }, "slug" : { "type" : "string" }, "tags" : { "type" : "string"...
发表于
前面说了如何申请免费的bonsai.io elasticsearch搜索引擎,麻烦的是没有中文分词,而且试用期有限。没办法,自己搭建Elasticsearch服务器来做Ghost搜索吧。 那么,我们怎么从Ghost blog来建立Elasticsearch的搜索引擎呢? 第一步:搭建Elasticsearch服务器并安装ik分词 wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.3/elasticsearch-2.3.3.tar.gz vi elasticsearch-2.3.3/config/elasticsearch.yml ... network.host: 162.216.122.100,127.0.0.1 http....
发表于
老梗了,时代一直在发展,安装也更简洁了 elasticsearch 用的是 2.3.3 的版本 java是1.8 ik 是1.9.3的版本 安装跟以前不太一样了: elasticsearch安装: wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.3/elasticsearch-2.3.3.tar.gz vi elasticsearch-2.3.3/config/elasticsearch.yml ... network.host: 172.16.11.2,...
发表于
Index API Create an index (you can also just start indexing documents) PUT /blog { "settings" : { "number_of_shards" : 3, "number_of_replicas" : 1 }, "mappings" : ... } Get the mapping GET /blog/_mapping/post Send the mapping PUT /blog { "mappings": { "post" : { "properties" : { "title" : { "type" : "string", "analyzer": "english", "fields" : { "raw" : { "type" : "string", "index" : "not_...
发表于
其实rsyslog、syslog-ng、nxlog这三种东西真的是都差不多。随便选一个用都没问题。 比较喜欢nxlog的route和json功能,所以用它来推数据到elasticsearch 用om_elasticsearch推: ... <Input in> Module im_tcp Host 0.0.0.0 Port 1514 InputType Binary </Input> <Output es> Module om_elasticsearch URL http://localhost:9200/_bulk FlushInterval 2 FlushLimit 100 # Create an index daily Index strftime($EventTime,...
发表于
Elasticsearch把每条数据叫做Document,然后提交到Index中。 简单说,Document中的数据是如何转变成倒排索引的,以及查询语句是如何转换成一个个词(Term)使高效率文本搜索变得可行,这种转换数据的过程就称为文本分析(analysis)。 analysis 基本概念 === elasticsearch全文搜索引擎会用某种算法(Tokenizer)对要建索引的文档进行分析, 从文档中提取出若干Token(词元), 这些算法称为Tokenizer(分词器), 这些Token会被进一步处理, 比如转成小写等, 这些进一步的处理算法被称为Filter(过滤器), 被处理后的结果被称为Term(词), 文档中包含了几个这样的Term被称为Frequency(词频)。 引擎会建立Term和原文档的Inverted Index(倒排索引), 这样就能根据Term很快到找到源文档了。 文本分析(analysis)工作由analyzer(分析器)组件负责。analyzer由一个分词器(tokenizer)和0个或者多个过滤器(filter)组成,也可能会有0个或者多个字符映射器(character mappers)组成。 tokenizer用来把文本拆分成一个个的Token。Token包含了比较多的信息,比如Term在文本的中的位置及Term原始文本,以及Term的长度。文本经过tokenizer处理后的结果称为token stream。...
发表于
在自建ghost blog的elasticsearch的文章中,我们已经看到了回调地狱(callback hell!!!),这真是个恐怖至极的东西。 应该有更优雅的方式来直接把ghost blog的内容导入elasticsearch吧。 我们来看一看: 先装需要的库,这里假设ghost用得是sqlite3的库,如果是mysql,需要修改下! # mkdir /home/ex # cd /home/ex # npm install async # npm install request # npm install sqlite3 # cat /home/ex/run02.js var util = require("util"); var sqlite3 = require("sqlite3"); var async = require("async"); var request = require("request"); function...
发表于
上一篇我们用了python的原生库requests来访问elasticsearch,其实还有包装好的elasticsearch-py库可以用。 from elasticsearch import Elasticsearch es = Elasticsearch(['http://172.16.11.2:9200']) #es = Elasticsearch(['https://user:secret@localhost:443']) res = es.search(index="products", doc_type="product", body={"query": {"match": {"description": "Whi"}}}) print("%d documents found" % res['hits']['total']) for doc in res['hits']['hits']: print("%s) %s"...
发表于
Python访问Elasticsearch最直接的方法就是用requests库 easy_install requests 或者 yum install python-requests 搜索功能: def search(uri, term): """Simple Elasticsearch Query""" query = json.dumps({ "query": { "match": { "description": term } } }) response = requests.get(uri, data=query) results = json.loads(response.text) return results 格式化结果: def format_results(results): """Print results nicely: doc_id) content """ data = [doc for...
发表于
这是一篇长文...... 前面写了好几篇elasticsearch的文章,这跟linux系统管理看起来毫不沾边啊。理由很朴素,想给自己的Ghost blog加个搜索引擎。试了几个都不如意,于是干脆搭建一个elasticsearch自用。 鉴于生产环境的主程序和elasticsearch通常是分开的。不可能直接主程序调用elasticsearch的9200进行查询,通常是会在中间加一层proxy代理,通过api查询。所以有了之前的flask代理api。 现在我们已经从 免费的elasticsearch 有了自己的服务器,我们怎么从Ghost blog来建立Elasticsearch的搜索引擎呢? 第一步:添加个博客的url,列出所有文章: 首先添加ghost的routes,使得能看到所有文章 # vi core/server/routes/frontend.js ... // redirect to /ghost and let that do the authentication to prevent redirects to /ghost//admin etc. router.get(/^\/((ghost-admin|admin|wp-admin|...
发表于
如果我们已经把 测试数据 导入了elasticsearch,并安装好了插件head,那么就会看到Elasticsearch中已经有很多数据了。 如上,collections有86772条记录,products有538790条记录,users有970446条记录。 有了数据,我们该如何去套个查询的api呢? 首先我们拿products的随便一条记录来看看: { "_index": "products", "_type": "product", "_id": "5246bc3dee910bfe70000063", "_version": 1, "_score": 1, "_source": { "category": "womens_fashion", "image_url": "https://s3.amazonaws.com/savvy_products/5246bc3dee910bfe70000063_1380367421", "original": 1, "description": "Soie Women's Bra", "likers": [], "country": "in", "price": "Rs. 440", "hashtags": [], "image_...
发表于
https://bonsai.io 在上面的网址就可以免费注册一个elasticsearch的服务器。 注册过程就不多说了。 注册后建立一个cluster: 点击集群进去,打开Interactive console: 首先我们必须创建一个index POST /movies 这样就建立好了一个movies的index 然后弄点数据进去 PUT /movies/movie/1 { "title": "The Godfather", "director": "Francis Ford Coppola", "year": 1972 } 这样就好了。 修改一下mapping PUT /movies/movie/_mapping { "movie": { "properties": { "director": { "type": "multi_field", "fields": { "director": {"type": "string"}, "original": {"type" : "string", "index" : "not_analyzed"} } } } } } 然后重新提交一下数据,...
发表于
我们前面其实已经提到了数据的增加和查询,这里就详细说一下。 一、Elasticsearch数据的增加和修改是一样的。 curl -XPUT "http://localhost:9200/movies/movie/1" -d' { "title": "The Godfather", "director": "Francis Ford Coppola", "year": 1972 }' 以上等于往index: movies、type: movie 、id: 1提交了一条数据。 往elasticsearch提交数据的时候,index/type/id是三要素。 二、删除 根据id直接删除 curl -XDELETE "http://localhost:9200/movies/movie/1" -d'' 三、查询 查询比较复杂: http://localhost:...
发表于
在 往elasticsearch里导入数据 里,我们已经弄了很多数据导入了elasticsearch,那么,我们来弄个查询界面吧。 我们要查的对象是collections,查询方式就是最基本的,类似下面 GET /collections/collection/_search?q=* 套一个angularJS的外壳 源代码下载 解压,把_site目录下的所有东西放到任意一个web目录下. 我们的web服务器ip是172.16.8.1,和elasticsearch不在同一台上。 修改一下js/config.js,改成elasticsearch服务器的地址,index_name和type: var CALACA_CONFIGS = { url: "http://172.16.11.2:9200", index_name: "collections", type: "collection", size: 10, search_delay: 500...
发表于
数据包下载:http://www.rendoumi.com/soft/testdata.tgz 准备了三种数据,collections、products、users,要导入elasticsearch,压缩后247兆,先解压看看大小: -rw-r--r-- 1 root root 47M May 29 10:30 collections-anon.txt -rw-r--r-- 1 root root 522M May 29 10:33 products-anon.txt -rw-r--r-- 1 root root 857M May 29 10:36 users-anon.txt users是用户表,products是产品表,...
发表于
Elasticsearh是个搜索引擎,基于lucene和solr,类似个数据库,往里面导入json格式的数据,然后可以做检索。和mongo db不同,它可以全文搜索,分词。它的查询和管理是基于http的json请求。 安装十分简单,直接下载运行即可。 下载: wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.3/elasticsearch-2.3.3.tar.gz 改一下配置,本身是只监听localhost的,调试不便,增加个IP: vi elasticsearch-2.3.3/config/elasticsearch.yml ... network.host: 172.16.11.2,...