【发布时间】:2016-02-03 20:27:50
【问题描述】:
虽然记录在案,但没有工作示例说明如何使用索引时间和不同的查询时间分析器创建索引。
我希望仅对搜索应用同义词过滤器。如果我指定分析器名称,我可以测试分析器,但没有名称,它不会检测到默认值。
可能出了什么问题?
"settings": {
"index": {
"analysis": {
"filter": {
"synonym": {
"type": "synonym",
"synonyms": [
"testword => otherword"
]
}
},
"analyzer": {
"default_search": {
"filter": [
"lowercase",
"asciifolding",
"synonym"
],
"tokenizer": "standard"
},
"default_index": {
"filter": [
"lowercase",
"asciifolding"
],
"tokenizer": "standard"
}
}
}
注意两个不同的分析器,名为default_search 和default_index。根据文档,这些应该被选为默认值。因此,如果我执行对“testword”的搜索,它将改为搜索“otherword”。
我可以确认在索引类型上设置了默认分析器名称:
"myIndex": {
"mappings": {
"myType": {
"index_analyzer": "default_index",
"search_analyzer": "default_search",
"properties": ...
我执行一个测试搜索:
在未指定分析器/myIndex/_analyze/?pretty=true&text=testword 的情况下调用(期望它按照配置拾取default_search)
{
"tokens" : [ {
"token" : "testword",
"start_offset" : 0,
"end_offset" : 9,
"type" : "<ALPHANUM>",
"position" : 1
} ]
}
使用特定分析器调用myIndex/_analyze/?analyzer=default_search&pretty=true&text=testword
{
"tokens" : [ {
"token" : "otherword",
"start_offset" : 0,
"end_offset" : 9,
"type" : "SYNONYM",
"position" : 1
} ]
}
一个示例搜索,索引包含一个字段值为“otherword”的项目。下面的查询不返回任何结果,搜索“其他单词”会返回所需的项目。
POST myIndex/_search
"query": {
"multi_match": {
"query": "testword",
"analyzer": "default_search",
"fields": [
"name"
]
}
}
【问题讨论】:
-
请注意,用于索引的默认分析器应命名为
default,而不是default_index(参见[此处])。(elastic.co/guide/en/elasticsearch/reference/2.2/…)。您还可以解释一下您是如何运行测试搜索的吗? -
@Val 查看显示查询的更新问题
-
你用的是什么版本的ES?
-
@ChintanShah25 我正在使用来自 bonsai.io 的托管版本 - 似乎是版本
1.7.2 -
尝试通过 docker 使用版本
2.2.0并遇到同样的问题。我确定我做错了什么!
标签: elasticsearch