Giter Club home page Giter Club logo

laravel-scout-elastic-demo's Introduction

laravel-scout-elastic-demo


 创造不息,交付不止

目录

Introduction

我们要做的东西比较简单,就是把一个公众账号的文章拉下来,然后实现所有文章的“标题”和“内容”的搜索,在项目中我选择了李笑来老师的”学习学习再学习“中的50篇文章。

这个 Demo 是“笑来搜”的一个原型。

你可以直接看一下最终的效果,请查看 http://scout.lijinma.com/search

如果想看看代码原理,请请查看三篇文章:

一:写一个搜索:使用 Laravel Scout,Elasticsearch,ik 分词

二:写一个搜索:解决搜索结果高亮问题,使用 Laravel Scout,Elasticsearch,ik 分词

三:写一个搜索:自定义词库;使用 Laravel Scout,Elasticsearch,ik 分词

Versions

Laravel 5.4

ElasticSearch 5.1.1

因为使用 Laravel 5.4 版本,所以需要一些基本的安装需求:

  • PHP >= 5.6.4
  • OpenSSL PHP Extension
  • PDO PHP Extension
  • Mbstring PHP Extension
  • Tokenizer PHP Extension
  • XML PHP Extension

Installation

你可以使用 homestead 或者 valet 来跑这个项目,但是为了你更快就玩起来,我建议你这么做:

如果是你 Mac 平台:

# 安装最新的 php 7.1 版本
$ brew install php71

# 安装 mysql 5.7
$ brew install mysql

如果 brew 下载太慢了,推荐一个我使用的镜像,执行命令:

$ export HOMEBREW_BOTTLE_DOMAIN="http://homebrew-mirror-china.tycdn.net"

好了,以上依赖按照完成之后,就可以安装项目了。

$ git clone https://github.com/lijinma/laravel-scout-elastic-demo.git

安装依赖:

$ composer install

如果没有 composer,请下载 composer,参考

https://getcomposer.org/download/

创建数据库:

$ mysql -uroot
> create database laravel_scout_elastic_demo;

修改 .env:

$ cp .env.example .env

确认里面的数据库配置正确:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_scout_elastic_demo
DB_USERNAME=root
DB_PASSWORD=

安装 ElasticSearch:

因为我们要使用 ik 插件,在安装这个插件的时候,如果自己想办法安装这个插件会浪费你很多精力。

所以我们直接使用项目: https://github.com/medcl/elasticsearch-rtf

当前的版本是 Elasticsearch 5.1.1,ik 插件也是直接自带了。

安装好 ElasticSearch,跑起来服务,测试服务安装是否正确:

$ curl http://localhost:9200

{
  "name" : "Rkx3vzo",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "Ww9KIfqSRA-9qnmj1TcnHQ",
  "version" : {
    "number" : "5.1.1",
    "build_hash" : "5395e21",
    "build_date" : "2016-12-06T12:36:15.409Z",
    "build_snapshot" : false,
    "lucene_version" : "6.3.0"
  },
  "tagline" : "You Know, for Search"
}

如果正确的打印以上信息,证明 ElasticSearch 已经安装好了。

接着你需要查看一下 ik 插件是否安装(请在你的 ElasticSearch 文件夹中执行):

$ ./bin/elasticsearch-plugin list
analysis-ik

如果出现 analysis-ik,证明 ik 已经安装。

开启 php 自带 Web sever

请确保你的 8000 端口没有被占用。

$ php artisan serve

从浏览器打开 http://localhost:8000 ,确认是否正常显示:

demo1

初始化和 ElasticSearch 相关的配置,创建 index

$ php artisan es:init

初始化数据库表格

$ php artisan migrate

爬取公众号数据并导入。

$ php artisan post:import

出现以下内容,说明正确导入了:

...
create one post!
create one post!
create one post!
create one post!
...

完成

从浏览器打开 http://localhost:8000,搜索一个数据,比如成长

demo2

打赏

我是金马,一个想搞点事情的程序员。如果这个项目对你有帮助,你可以请我喝杯咖啡,谢谢 :)

License

The MIT License (MIT).

laravel-scout-elastic-demo's People

Contributors

aufree avatar lijinma avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

laravel-scout-elastic-demo's Issues

InvalidArgumentException Unable to parse URI: :9200/_template/rtf 不能够解析 这个url请问要怎么办

@lijinma @Aufree

[root@localhost blog]# php artisan es:init

InvalidArgumentException

Unable to parse URI: :9200/_template/rtf

at vendor/guzzlehttp/psr7/src/Uri.php:84
80| {
81| if ($uri !== '') {
82| $parts = self::parse($uri);
83| if ($parts === false) {

84| throw new \InvalidArgumentException("Unable to parse URI: $uri");
85| }
86| $this->applyParts($parts);
87| }
88| }

  +4 vendor frames

5 app/Console/Commands/InitEs.php:69
GuzzleHttp\Client::put(":9200/_template/rtf", [])

6 app/Console/Commands/InitEs.php:40
App\Console\Commands\InitEs::createTemplate(Object(GuzzleHttp\Client))

此搜索是否鸡肋?

mysql 5.7 已经实现中文汉字的分词搜索。而elastic的优势就在于它的灵活。如果仅仅是因为简单的单表搜索,我觉得大不必使用此插件啊~

中文分词不生效

场景:有一篇文章的标题是【孩子为什么叛逆】,我搜【孩子】或者【叛逆】可以搜索出来,但是我搜【孩子叛逆】就没有结果,已确认elasticsearch安装了ik插件,在elasticsearch-head插件上查询

{
  "query": {
    "match": {
      "content": "孩子叛逆"
    }
  }
}

是有结果的,不知道为什么在laravel就不行了呢

elastic search5.2版本下,高亮没效果

照着代码写的,然后用的别的表,能搜到数据,高亮没实现,这个好尴尬,看文档和发送的数据,感觉也对,就是没有高亮效果,请问你遇到这个问题了吗?

点击“搜索”按钮之后,显示页面Not Found

Demo里的路由是这样的...

`Route::get('/', function () {
    return redirect('/search');
});

Route::get('/search', [
    'uses' => 'PostController@search'
]);`

无法打开“首页”,点击“搜索”之后,也会报“Not Found”;

`Route::get('/', 'PostController@search');

Route::get('/search', 'PostController@search');`

我改成这样了,可以展示“首页”了,但是点击之后,还是会报
“The requested URL /search was not found on this server.”

求助

无法高亮显示~

-----------------问题一:---------------
http://chuantu.biz/t5/117/1498456179x2362433453.png
http://i.niupic.com/images/2017/06/26/qlG8aT.png
防止图片链接挂掉 我上传了2份 麻烦demo作者看下

情况如图所示!我安装elasticsearch 和ik都是最新版本。。您的demo直接clone下来
.env配置这样写的
ELASTICSEARCH_INDEX=ikindex
ELASTICSEARCH_HOST=192.168.10.10:9200
SCOUT_DRIVER=elasticsearch
demo其他地方未修改

我执行的步骤
php artisan es:init
php artisan posts:import
数据库里面有50条数据

php artisan scout:flush App\Post
php artisan scout:import App\Post
然后搜索出来结果就是上面的图片显示的结果

附上elasticsearch head上显示的信息
http://chuantu.biz/t5/117/1498457233x2728329119.png
http://chuantu.biz/t5/117/1498457277x2362433453.png

http://i.niupic.com/images/2017/06/26/RDuUiT.png
http://i.niupic.com/images/2017/06/26/QrnopK.png

-----------------问题二:---------------
我在,model\Post 增加

//得到该模型索引的名称
public function searchableAs()
{
return 'ikindex';
}

这里返回的内容跟.env ELASTICSEARCH_INDEX配置是一致的
我搜索关键字为 学生

但是搜索后结果为空
关于 “学生” 的搜索结果, 共 0 条

是否可以引入elastic的灵活性使得此插件更具价值

这个插件确实不错,让人少走了很多摸索的弯路。但是值得一提的是mysql 5.7 已经实现中文汉字的分词搜索,而elastic的优势在于它的灵活。如果仅仅是因为简单的单表搜索,我觉得可以直接使用mysql的新特性啊

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.