Node.js 如何在弹性搜索中忽略撇号?
如何在弹性搜索中忽略撇号 假设我正在寻找一个字符串Node.js 如何在弹性搜索中忽略撇号?,node.js,elasticsearch,analyzer,Node.js,elasticsearch,Analyzer,如何在弹性搜索中忽略撇号 假设我正在寻找一个字符串Paul的。我希望在发送诸如:pauls或paul's之类的术语时能够匹配它 这就是我的索引配置的样子:(我曾尝试使用自定义分析器来实现这一点,但它不起作用): 在搜索pauls时,词干分析器对您没有帮助。为此,您确实需要忽略撇号“。下面,我在标题字段中添加了一个子字段,该字段使用字符过滤器忽略撇号。但在搜索本身中,您需要同时使用主字段--标题——和子字段--标题。无词干分析器: DELETE test PUT test { "setting
Paul的
。我希望在发送诸如:pauls
或paul's
之类的术语时能够匹配它
这就是我的索引配置的样子:(我曾尝试使用自定义分析器来实现这一点,但它不起作用):
在搜索
pauls
时,词干分析器对您没有帮助。为此,您确实需要忽略撇号“
。下面,我在标题
字段中添加了一个子字段,该字段使用字符过滤器忽略撇号。但在搜索本身中,您需要同时使用主字段--标题
——和子字段--标题。无词干分析器
:
DELETE test
PUT test
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"filter": [
"standard",
"lowercase",
"my_stemmer"
]
},
"no_stemmer_analyzer": {
"tokenizer": "standard",
"filter": [
"standard",
"lowercase"
],
"char_filter": "my_char_filter"
}
},
"filter": {
"my_stemmer": {
"type": "stemmer",
"name": "possessive_english"
}
},
"char_filter": {
"my_char_filter": {
"type": "mapping",
"mappings": [
"'=>"
]
}
}
}
},
"mappings": {
"my_type": {
"properties": {
"description": {
"type": "text"
},
"title": {
"type": "text",
"analyzer": "my_analyzer",
"fields": {
"no_stemmer": {
"type": "text",
"analyzer": "no_stemmer_analyzer"
}
}
}
}
}
}
}
POST test/my_type/_bulk
{"index":{}}
{"title":"Paul's"}
{"index":{}}
{"title":"Paul"}
{"index":{}}
{"title":"Pauls"}
GET test/_search
{
"query": {
"multi_match": {
"fields": ["title", "title.no_stemmer"],
"query": "Paul's"
}
}
}
查询字符串也可以通过搜索“paul’s”或“pauls”来解决此要求吗?@EiriniGraonidou是的,类似于以下内容,但仍然使用我提到的分析器和子字段:
“query”:{“query_字符串”:{“default_字段”:“title*,“query”:“paul s”}
谢谢,这很有魅力。非常聪明,有额外的领域!
DELETE test
PUT test
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"filter": [
"standard",
"lowercase",
"my_stemmer"
]
},
"no_stemmer_analyzer": {
"tokenizer": "standard",
"filter": [
"standard",
"lowercase"
],
"char_filter": "my_char_filter"
}
},
"filter": {
"my_stemmer": {
"type": "stemmer",
"name": "possessive_english"
}
},
"char_filter": {
"my_char_filter": {
"type": "mapping",
"mappings": [
"'=>"
]
}
}
}
},
"mappings": {
"my_type": {
"properties": {
"description": {
"type": "text"
},
"title": {
"type": "text",
"analyzer": "my_analyzer",
"fields": {
"no_stemmer": {
"type": "text",
"analyzer": "no_stemmer_analyzer"
}
}
}
}
}
}
}
POST test/my_type/_bulk
{"index":{}}
{"title":"Paul's"}
{"index":{}}
{"title":"Paul"}
{"index":{}}
{"title":"Pauls"}
GET test/_search
{
"query": {
"multi_match": {
"fields": ["title", "title.no_stemmer"],
"query": "Paul's"
}
}
}