Elasticsearch 显示搜索查询的文本字段术语
Elasticsearch show text field terms for search query
我有一个字段为 content
的索引,这是一个映射:
{
"properties": {
"content": {
"type": "text",
"analyzer": "english"
}
}
}
我有一个简单的搜索查询
curl -X GET 'localhost:9200/idx/_search' -H 'content-type: application/json' -d '{
"query": {
"match": {
"content": "yellow fox"
}
},
"fields": [
"content"
]
}'
{
...
"hits" : {
"hits" : [
{
...
"fields" : {
"content" : [
"Yellow foxes jump"
]
},
}
...
}
如何修改我的搜索查询以同时接收 analyze API 提供的内容字词:
curl -X GET 127.0.0.1:9200/_analyze -H 'content-type: application/json' -d '{
"analyzer" : "english",
"text" : "yellow foxes"
}'
{
"tokens" : [
{
"end_offset" : 6,
"position" : 0,
"start_offset" : 0,
"token" : "yellow",
"type" : "<ALPHANUM>"
},
{
"end_offset" : 12,
"position" : 1,
"start_offset" : 7,
"token" : "fox",
"type" : "<ALPHANUM>"
}
]
}
通常,搜索查询的期望输出如下所示
{
...
"hits" : {
"hits" : [
{
...
"fields" : {
"content" : [
"Yellow foxes jump"
],
"content_terms": [
"yellow", "fox", "jump"
]
},
}
...
}
您不必为搜索字词做任何特别的事情 - 因为您已经在做。当您在匹配查询中给出一个句子时 - 句子本身使用与索引相同的分析器进行标记化。
这意味着,如果查询是“quick brown fox”——它搜索“quick”“brown”“fox”;在短语查询的情况下 - ES 还将检查所有术语是否相近。
我有一个字段为 content
的索引,这是一个映射:
{
"properties": {
"content": {
"type": "text",
"analyzer": "english"
}
}
}
我有一个简单的搜索查询
curl -X GET 'localhost:9200/idx/_search' -H 'content-type: application/json' -d '{
"query": {
"match": {
"content": "yellow fox"
}
},
"fields": [
"content"
]
}'
{
...
"hits" : {
"hits" : [
{
...
"fields" : {
"content" : [
"Yellow foxes jump"
]
},
}
...
}
如何修改我的搜索查询以同时接收 analyze API 提供的内容字词:
curl -X GET 127.0.0.1:9200/_analyze -H 'content-type: application/json' -d '{
"analyzer" : "english",
"text" : "yellow foxes"
}'
{
"tokens" : [
{
"end_offset" : 6,
"position" : 0,
"start_offset" : 0,
"token" : "yellow",
"type" : "<ALPHANUM>"
},
{
"end_offset" : 12,
"position" : 1,
"start_offset" : 7,
"token" : "fox",
"type" : "<ALPHANUM>"
}
]
}
通常,搜索查询的期望输出如下所示
{
...
"hits" : {
"hits" : [
{
...
"fields" : {
"content" : [
"Yellow foxes jump"
],
"content_terms": [
"yellow", "fox", "jump"
]
},
}
...
}
您不必为搜索字词做任何特别的事情 - 因为您已经在做。当您在匹配查询中给出一个句子时 - 句子本身使用与索引相同的分析器进行标记化。
这意味着,如果查询是“quick brown fox”——它搜索“quick”“brown”“fox”;在短语查询的情况下 - ES 还将检查所有术语是否相近。