标签: elasticsearch-ruby

Elasticsearch 7 [标准] 令牌过滤器已被删除

我正在尝试升级到 Elasticsearch v7(我使用的是 ruby​​/rails 客户端),在这样做并修复了一些东西后,我遇到了以下错误

Elasticsearch::Transport::Transport::Errors::BadRequest:
  [400] {"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"The [standard] token filter has been removed."}],"type":"illegal_argument_exception","reason":"The [standard] token filter has been removed."},"status":400}
Run Code Online (Sandbox Code Playgroud)

在检查破坏性变化时,确实提到

标准令牌过滤器已被删除,因为它不会更改流中的任何内容。

我不确定我应该如何在我的配置中反映这一点。如果我理解正确,此错误可能来自我的自定义短语建议器

{
  "analysis": {
    "filter": {
      "shingle": {
        "type": "shingle",
        "min_shingle_size": 2,
        "max_shingle_size": 3
      }
    },
    "analyzer": {
      "trigram": {
        "type": "custom",
        "tokenizer": "standard",
        "filter": ["standard", "shingle"]
      },
      "reverse": {
        "type": "custom",
        "tokenizer": "standard",
        "filter": ["standard", "reverse"]
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我应该删除该tokenizer字段吗?也许他们忘了更新它,但这仍然是在[Elasticsearch documentation of the suggester][1]

如果问题不是从那里来的,我应该去哪里查看?

  • ES 7.3.2
  • elasticsearch-api-7.3.0 | 弹性搜索传输 7.3.0
  • 弹性搜索模型 7.0.0 …

elasticsearch elasticsearch-ruby

7
推荐指数
1
解决办法
5532
查看次数

如何在弹性搜索查询中传递特定字段的值列表

我有一个查询provider_id要从Elastic Search Cluster. 我正在使用以下查询来获取单个结果, provider_id但需要帮助确定如何传递提供者列表。

{
"query": {
    "bool": {
        "must": [{
            "match": {
                "message.provider_id": {
                    "query": 943523,
                    "type": "phrase"
                }
            }
        }]
    }
}
}
Run Code Online (Sandbox Code Playgroud)

假设我想搜索provider_ids = [913523, 923523, 923523, 933523, 953523]那么我应该如何修改查询?

elasticsearch elasticsearch-plugin elasticsearch-ruby

5
推荐指数
1
解决办法
5013
查看次数

弹性搜索垃圾收集由于聚合查询而花费更多时间

无论何时运行大量聚合,都会经常发生弹性搜索峰值请求排队.有什么方法可以避免这种情况吗?

elasticsearch-ruby

5
推荐指数
0
解决办法
38
查看次数

Elasticsearch 将较短/不太相关的标题排在第一位

我正在使用 Elasticsearch 7.3 进行产品搜索。产品标题的格式不一样,但我对此无能为力。

有些标题可能如下所示:

Ford Hub Bearing
Run Code Online (Sandbox Code Playgroud)

还有其他人这样的:

Hub bearing for a Chevrolet Z71 - model number 5528923-01
Run Code Online (Sandbox Code Playgroud)

如果有人搜索“雪佛兰轮毂轴承”,“福特轮毂轴承”产品排名第一,雪佛兰零件排名第二。如果我从产品标题中删除所有额外的文本(型号 5528923-01),雪佛兰部件将根据需要排名第一。

不幸的是,我无法修复产品标题,因此当有人搜索时,我需要能够将雪佛兰零件排名第一Chevrolet Hub Bearing。我只是将 的类型设置nametext并将standard分析器应用到我的索引中。这是我的查询代码:

{
    query:{

        bool: {
            must: [
                {
                    multi_match:{
                        fields: 
                            [
                               'name'
                             ],
                             query: "Chevrolet Hub Bearing"
                    }
                 }                  
            ]
        }

    }         
}
Run Code Online (Sandbox Code Playgroud)

elasticsearch elasticsearch-ruby

2
推荐指数
1
解决办法
976
查看次数

Elasticsearch 6.3.2 术语匹配空数组“加上”其他

在我的数据库中,一个帖子可以有零 (0) 个或多个类别表示为一个数组。

当我进行查询时,要查看这些类别,传递一些值:

{
  "query": {
    "bool": {
      "should": {
        "terms": {
          "categories": ["First", "Second", "And so on"]
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

它运作良好,我有我期待的记录。但是当我想包含这些帖子时问题就来了,其中类别是一个空数组 ([])。

我现在正在从旧版本的 ES (1.4.5) 升级到版本 6.3.2,并且这段代码是使用“missing”制作的,它已被弃用。

我试过更改映射添加著名的"null_value": "NULL",然后查询,但没有奏效。还尝试了 should 和 must_not 的组合,如升级“missing”的建议,但没有奏效。

我怎样才能做到这一点?这意味着如果我已经索引:

Post.new(id: 1, title: '1st', categories: [])
Post.new(id: 2, title: '2nd', categories: ['news', 'tv'])
Post.new(id: 3, title: '3rd', categories: ['tv', 'trending'])
Post.new(id: 4, title: '4th', categories: ['movies'])
Post.new(id: 5, title: '5th', categories: ['technology', 'music'])
Run Code Online (Sandbox Code Playgroud)

结果应返回帖子编号 1, 2 y 3 - 具有“新闻”、“电视”或空数组作为类别的帖子。

ruby-on-rails elasticsearch elasticsearch-rails elasticsearch-ruby

1
推荐指数
1
解决办法
452
查看次数