我正在尝试升级到 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]
如果问题不是从那里来的,我应该去哪里查看?
我有一个查询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 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。我只是将 的类型设置name为text并将standard分析器应用到我的索引中。这是我的查询代码:
{
query:{
bool: {
must: [
{
multi_match:{
fields:
[
'name'
],
query: "Chevrolet Hub Bearing"
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud) 在我的数据库中,一个帖子可以有零 (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