搜索Elasticsearch

如何解决搜索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查询使用在字段上定义的同一分析器来创建搜索令牌(即,根据搜索词创建的)。

match query official docs

返回与提供的文本,数字,日期或布尔值匹配的文档 值。 在匹配之前对提供的文本进行分析。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?