elasticsearch - 搜索时从Elasticsearch中排除空格

标签 elasticsearch laravel-5

我的网站上的 Elasticsearch 效果很好,我可以搜索到相当不错的血统。我的问题是,当我在诸如HipHop与Hip Hop或手机与手机之类的内容上进行搜索时,我的第一个文本查询结果不会出现。我要这样做,以便用户搜索带有或不带有空格的单词时,结果都是一样的。这是我要搜索的代码的样子。我正在使用Laravel 5

 $q = $request->input('q');
  $response = $client->search([
        'index' => 'users',
        'type' => 'user',
        'body' => [
            'query' => [
                'bool' => [
                    'should' => [
                        ['match' => [ 'text' => $q ] ],
                    ],
                ],  
            ],
        ],
    ]);

最佳答案

首先,您必须了解索引过程,如果不更改默认映射,则基本上是将字符串通过default analyser传递。

HipHop将保持不变

嘻哈像嘻哈,跳一样分开保存

当您像使用HipHop vs Hip Hop的示例进行匹配查询时,该查询也会通过分析器传递,并且将被分隔为:“HipHop,vs,Hip,Hop”和一个 bool(boolean) 型查询,将执行以下搜索: “匹配HipHop?”,“匹配vs?”,“匹配Hip?”,“匹配Hop?”。 ?

如果您想为HipHop编制索引并且用户搜索Hip Hop或HipHop与Hip Hop或HopHip并返回HipHop的情况,则必须实现以下策略:

正则表达式或前缀查询:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html

用于部分匹配的Ngram:https://www.elastic.co/guide/en/elasticsearch/guide/current/_ngrams_for_partial_matching.html

同义词:https://www.elastic.co/guide/en/elasticsearch/guide/current/using-synonyms.html

而且,如果要保留带有像“嘻哈”这样的索引空间的术语,则需要使用not_analyzed映射。

关于elasticsearch - 搜索时从Elasticsearch中排除空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39259450/

相关文章:

rest - 为什么 Elasticsearch 批量插入使用\n定界符,而不是使用json对象数组?

php - 拉维尔 5.1 : sendOutputTo() truncating log file?

jquery - 如何将 css 脚本和 jquery 脚本添加到 Laravel @extends ('layouts.app' ) @section ('content' )

php - 时间格式在 Laravel 查询构建器选择中不起作用

php - 我们必须在 Laravel : in model, Controller 或路由中编写查询吗?

php - 如何使用 Codeception 测试 laravel 5 API?

elasticsearch - 可选字段Grok模式LOGSTASH

r - 如何在R中的弹性包中使用index_create()为数据建立索引

elasticsearch - Elasticsearch Bool过滤器查询返回结果

elasticsearch - 使用Elasticsearch进行查询时遇到麻烦