如何解决搜索Elasticsearch
我创建documents
类型的_doc
索引。然后我
设置自定义分析器,如下所述
POST /documents/_close
PUT /documents/_settings
{
"settings": {
"analysis": {
"analyzer": {
"custom_analyzer": {
"type": "custom","tokenizer": "standard","filter": [
"lowercase","word_delimiter_graph"
]
}
}
}
},"mappings": {
"properties": {
"question": {
"type": "text","analyzer": "custom_analyzer"
},"question_group": {
"type": "text","analyzer": "custom_analyzer"
}
}
}
}
POST /documents/_open
我尝试使用此custom_analyzer
,然后就可以使用
POST http://localhost:9200/documents/_analyze
{
"analyzer": "custom_analyzer","text": "FIRE_DETECTED"
}
# And the result (lowercase and remove _ )
{
"tokens": [
{
"token": "fire","start_offset": 0,"end_offset": 4,"type": "<ALPHANUM>","position": 0
},{
"token": "detected","start_offset": 5,"end_offset": 13,"position": 1
}
]
}
但是当我尝试搜索“火灾”或“检测到火灾”时,不起作用。
当我尝试搜索“检测到火灾”时,它仍然有效 (我为“ FIRE_DETECTED”编制了索引)
#This POST found nothing
POST /documents/_search
{
"query": {
"multi_match": {
"query": "fire detected","fields": [
"question^2","question_group"
]
}
}
}
解决方案
尝试使用新设置(上方)创建新索引
PUT /documents5
{
"settings": {...}
}
索引数据
PUT http://localhost:9200/documents5/_doc/1
{
"question": "fire_detected"
}
解决方法
发生这种情况的原因是,您只是将custom_analyzer
的定义添加到索引中,但没有对数据(索引中的文档)重新索引,因此新的令牌不存在于反向索引中。 要解决此问题,只需重新为要包含在搜索结果中的文档重新编制索引。
您正在使用内部使用multi_match
查询的match
查询,并且对这些查询进行了分析,因此您不需要搜索时间分析器。
match
查询使用在字段上定义的同一分析器来创建搜索令牌(即,根据搜索词创建的)。
返回与提供的文本,数字,日期或布尔值匹配的文档 值。 在匹配之前对提供的文本进行分析。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。