我正在使用自定义的NGRAM分析器,它有一个NGRAM标记器。我也用过小写过滤器。对于没有字符的搜索,该查询运行良好。但是当我搜索某些符号时,它失败了。由于我使用了小写标记器,Elasticsearch不分析符号。我知道空白标记器可以帮助我解决这个问题。如何在一个分析器中使用两个标记器?下面是映射:
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer":"my_tokenizer",
"filter":"lowercase"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "ngram",
"min_gram": 3,
"max_gram": 3,
"token_chars": [
"letter",
"digit"
]
}
}
}
},
"mappings": {
"_doc": {
"properties": {
"title": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
}
我有办法解决这个问题吗?
根据elasticsearch的文档,
分析器必须只有一个标记器。
但是,可以在设置中定义多个分析器,并且可以为每个字段配置单独的分析器。
PUT my_index
{
"mappings": {
"_doc": {
"properties": {
"title": {
"type": "text",
"analyzer": "whitespace"
"fields": {
"ngram": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
}
}
}
GET my_index/_search
{
"query": {
"multi_match": {
"query": "search @#$ whatever",
"fields": [
"title",
"title.ngram"
],
"type": "most_fields"
}
}
}
title
和分析器my_analyzer
标题
和分析器空白
别名
,如下所示执行以下命令:
POST _aliases
{
"actions":[
{
"add":{
"index":"index A",
"alias":"index"
}
},
{
"add":{
"index":"index B",
"alias":"index"
}
}
]
}
因此,当您最终编写查询时,它必须指向该别名,而该别名又将查询多个索引。
希望这能有所帮助!
在Elasticsearch中,我想用我的自定义分析器索引一些字段。因此,首先,我将分析器添加到其他配置中 Liferay公司- 其他索引配置 覆盖类型映射 在Liferay Elasticsearch中添加此属性后,我重置了索引,重新启动了Liferay。Portal使用我的映射和分析器正确创建了一个新索引。然后我重新索引了我的文档。当我在Elasticsearch中搜索某物时,它会显示预期的结
我无法确定问题的原因,我不知道是分析器无效还是elasticsearch甚至找到了autocomplete-analyser.json文件。我该怎么解决这个?
我正在用Java编写一个REST服务(在Tomcat 9上使用JAX-RS标准),我想向我的程序添加日志,以便在调用时跟踪他的工作。 因此,我使用Log4j(版本1.2.17)来编写日志,我想为在REST服务上运行的每个服务编写不同的日志文件,但我只需要为整个应用程序使用一个Log4j属性 所以我想在我的日志文件夹中保存这种日志 所以我把它写成Log4j(restServiceLogger.pro
我想创建一个搜索索引,其中包含我想要以下顺序的结果的属性: 首先,所有以搜索词开头的结果 然后所有包含搜索词的结果 为此,我想使用https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-edgengram-tokenizer.html 但是我的索引设置中已经有一个标记器kuromoji_tokenizer。
问题内容: 对于使用嵌套客户端的Elasticsearch非常新,我正在使用自定义分析器创建索引,但是在使用分析进行测试时,它似乎并未使用自定义分析器。主要没有Edgengram令牌出现。我缺少什么使我的自定义分析器成为索引的默认设置吗?当我使用elastichq检查映射时,它们会显示我的自定义分析器。 问题答案: 您已将自定义分析器添加到索引中,但是现在您需要将其应用到字段中。您可以在字段映射级
但是它返回的标记下面。 让我知道我在代码中遗漏了什么。