elasticsearch - 分析器是否会阻止字段突出显示?

标签 elasticsearch

你能帮我解决一些关于 elasticsearch 中特定语言分析器和高亮显示的问题吗?

我需要通过查询字符串搜索文档并突出显示匹配的字符串。 这是我的映射:

{
    "usr": {
        "properties": {
            "text0": {
                "type": "string",
                "analyzer": "english"
            },
            "text1": {
                "type": "string"
            }
        }
    }
}

请注意,“text0”字段设置了“english”分析器,而“text1”字段默认使用标准分析器。

目前在我的索引中只有一个文档:

hits": [{
    "_index": "tt",
    "_type": "usr",
    "_id": "AUxvIPAv84ayQMZV-3Ll",
    "_score": 1,
    "_source": {
        "text0": "highlighted. need to be highlighted.",
        "text1": "highlighted. need to be highlighted."
    }
}]

考虑以下查询:

{
    "query": {
        "query_string" : {
            "query" : "highlighted"
        }
    },
    "highlight" : {
        "fields" : {
            "*" : {}
        }
    }
}

我希望文档中的每个字段都被突出显示,但突出显示仅出现在“text1”字段(未设置分析器):

"hits": [{
    "_type": "usr", 
    "_source": {
        "text0": "highlighted. need to be highlighted.", 
        "text1": "highlighted. need to be highlighted."
    }, 
    "_score": 0.19178301, 
    "_index": "tt", 
    "highlight": {
        "text1": [
            "<em>highlighted</em>. need to be <em>highlighted</em>."
        ]
    }, 
    "_id": "AUxvIPAv84ayQMZV-3Ll"
}]

让我们考虑以下查询(由于分析器,我希望“突出显示”匹配“突出显示”):

{
    "query": {
        "query_string" : {
                "query" : "highlight"
            }
        },
    "highlight" : {
             "fields" : {
                 "*" : {}
             }
        }
}

但是根本没有回应:(英语分析器在这里工作吗?)

"hits": {
    "hits": [], 
    "total": 0, 
    "max_score": null
}

最后,考虑一些 curl 命令(请求和响应):

curl "http://localhost:9200/tt/_analyze?field=text0" -d "highlighted"

{"tokens":[{ 
    "token":"highlight",
    "start_offset":0,
    "end_offset":11,
    "type":"<ALPHANUM>",
    "position":1
}]}

curl "http://localhost:9200/tt/_analyze?field=text1" -d "highlighted" 

{"tokens":[{
    "token":"highlighted",
    "start_offset":0,
    "end_offset":11,
    "type":"<ALPHANUM>",
    "position":1
}]}

我们看到,通过将文本传递给英语和标准分析器,结果是不同的。 最后,问题:分析器是否会阻止字段突出显示?如何在全文搜索时突出显示我的字段?

附言我在装有 Windows 8.1 的本地计算机上使用 elasticsearch v1.4.4。

最佳答案

这与您的查询有关。您正在使用 query_string 查询并且您没有指定字段所以它正在搜索 _all默认情况下的字段。 这就是为什么您会看到奇怪的结果。将您的查询更改为 multi_match搜索两个字段的查询:

{
    "query": {
        "multi_match": {
            "fields": [
                "text1",
                "text0"
            ],
            "query": "highlighted"
        }
    },
    "highlight": {
        "fields": {
            "*": {}
        }
    }
} 

现在,这两个字段的突出显示结果将在响应中返回。

关于elasticsearch - 分析器是否会阻止字段突出显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29384418/

相关文章:

elasticsearch - Elasticsearch:使用Mappings为特定的值增加字段

Elasticsearch - 返回聚合以匹配特定值?

amazon-web-services - Elasticsearch 以使用Spark Submit将列值映射为ID

elasticsearch - 在 Kibana 上访问 _meta(在 _mapping 中)

elasticsearch - 问题设置集群elasticsearch,总是返回1个节点,配置有什么问题?

elasticsearch - Elasticsearch批量API错误

java - 在 Elasticsearch Java API 中将 _source 添加到 SearchQueryBuilder 的等效函数?

python - 格式化 elasticsearch-py 的输出

elasticsearch - Elasticsearch 1.5与Elasticsearch 2.x

调试 groovy 脚本 elasticsearch