当前位置: 首页 > 知识库问答 >
问题:

在[同义词]下找不到全局令牌过滤器

尉迟宇定
2023-03-14

因此,从本页的文档来看,似乎我可以用令牌生成器、令牌过滤器和字符过滤器构建一个自定义瞬态分析器,并使用Analyze API对我的示例文本进行测试。

目标是,我想看看同义词令牌过滤器是否满足我的需求,即哪些术语被标记为同义词,哪些不满足。

但是当我这么做的时候

curl-XGET'localhost:9200/u分析?char\u filters=html\u条

我得到的不是结果,而是

{
  "error": "ElasticsearchIllegalArgumentException[failed to find global token filter under [synonym]]",
  "status": 400
}

知道我做错了什么吗?

共有1个答案

马煌
2023-03-14

由于实现需要访问“索引的令牌生成器工厂”,因此目前不可能使用特殊同义词令牌筛选器(请参阅elasticsearch Github问题。)不幸的是,目前没有记录文档在分析endpoint上使用自定义令牌过滤器的这一限制

以下是一些示例命令,用于使用重新打开索引的方法创建和更新同义词令牌过滤器:

# create index with filter
curl -v -X PUT -s -H 'Content-Type: application/json' 'localhost:9200/syn_test_idx' -d '
{
  "settings" : {
    "analysis" : {
      "filter" : {
        "test_synonym_filter" : {
          "type" : "synonym",
          "synonyms" : [
            "i-pod, i pod => ipod",
            "universe, cosmos"
          ]
        }
      }
    }
  }
}

# test token filter
' | jq .
curl -X POST -s -H 'Content-Type: application/json' 'localhost:9200/syn_test_idx/_analyze' -d '{
  "tokenizer": "standard",
  "filter": ["global_synonym_filter"],
  "text": "cow i phone"
}' | jq .

(“i phone”未被同义词列表捕获。)

# update index
curl -X POST -s 'localhost:9200/syn_test_idx/_close' | jq .
curl -X PUT -s -H 'Content-Type: application/json' 'localhost:9200/syn_test_idx/_settings' -d '{
  "analysis" : {
    "filter": {
      "test_synonym_filter":{
        "type":"synonym",
        "synonyms" : [
          "i-pod, i pod => ipod",
          "universe, cosmos",
          "i-phone, i phone => iphone"
        ]
      }
    }
  }
}' | jq .
curl -X POST -s 'localhost:9200/syn_test_idx/_open' | jq .

# test token filter
' | jq .
curl -X POST -s -H 'Content-Type: application/json' 'localhost:9200/syn_test_idx/_analyze' -d '{
  "tokenizer": "standard",
  "filter": ["global_synonym_filter"],
  "text": "cow i phone"
}' | jq .

(“i phone”按同义词列表翻译为“iphone”。)

(另一个不相关的注意事项是,由于某种原因,我的zsh/YADR设置没有显示响应后主体,因此我正在通过管道将其传递给jq)

 类似资料:
  • 问题内容: 我一直在与ElasticSearch一起玩我的一个新项目。我已将默认分析器设置为使用ngram tokenfilter。这是我的elasticsearch.yml文件: 我创建了一个新索引并向其中添加了以下文档: 但是,当我使用查询或任何其他部分术语进行搜索时,ElasticSearch不会返回此文档。仅当我搜索确切的字词(如)时,它才会返回文档。 我还尝试过更改配置文件,以便defa

  • 问题内容: 由于我是elasticsearch的新手,因此我无法识别 ngram令牌过滤器 和 edge ngram令牌过滤器 之间的 区别 。 两者在处理令牌方面有何不同? 问题答案: 我认为文档对此非常清楚: 该标记器与nGram非常相似,但仅保留从标记开头开始的n-gram。 标记器的最佳示例再次来自文档: 使用此标记生成器定义: 简而言之: 令牌生成器将根据令牌的配置来创建令牌。在这个例子

  • 我试图创建自己的StopFilter实现,它将根据其他字段选择术语。 是否有一种方法可以从标记筛选器访问文档,然后访问其他字段? (我想使用UpdateRequestProcessor来通知我的TokenFilter关于状态的信息,但我没有找到很好的方法) 谢谢,本尼

  • 我使用postMan,输入请求地址http://localhost:8011/umrah/oauth/token?client_id=client_2&username=1234567&password=123456&grant_type=password&client_secret=123456,点击send按钮,出现错误,在内存中工作正常,当我想使用Jdbc令牌存储时,想法控制台错误:找不到令

  • 问题内容: 我正在尝试使用Elasticsearch来实现自动完成功能,因为我知道该怎么做… 我正在尝试在索引已爬网数据时使用ES的edge_n_grams建立多词(短语)建议。 a 和a 之间有什么区别-我已经阅读了有关这些文档,但仍需要更多了解…。 例如,token_filter是ES用来针对用户输入进行搜索的内容吗?ES用于制作令牌的令牌生成器是吗?什么是代币? ES是否可以使用其中任何一种