用于字数统计的 Elasticsearch 查询过滤器
Elasticsearch Query Filter for Word Count
我目前正在寻找一种方法来 return 在某个字段中最多包含 n 个单词的文档。
对于包含 "name" 字段中少于三个单词的文档的结果集,查询可能看起来像这样,但据我所知,没有像 word_count 这样的东西。
有谁知道如何处理这个问题,甚至可能以不同的方式?
GET myindex/myobject/_search
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"word_count": {
"name": {
"lte": 3
}
}
}
]
}
},
"query": {
"match_all" : { }
}
}
}
}
您可以使用 token_count
数据类型来索引给定字段中的标记数,然后在该字段上进行搜索。
# 1. create the index/mapping with a token_count field
PUT myindex
{
"mappings": {
"myobject": {
"properties": {
"name": {
"type": "string",
"fields": {
"word_count": {
"type": "token_count",
"analyzer": "standard"
}
}
}
}
}
}
}
# 2. index some documents
PUT index/myobject/1
{
"name": "The quick brown fox"
}
PUT index/myobject/2
{
"name": "brown fox"
}
# 3. the following query will only return document 2
POST myindex/_search
{
"query": {
"range": {
"name.word_count": {
"lt": 3
}
}
}
}
我目前正在寻找一种方法来 return 在某个字段中最多包含 n 个单词的文档。
对于包含 "name" 字段中少于三个单词的文档的结果集,查询可能看起来像这样,但据我所知,没有像 word_count 这样的东西。
有谁知道如何处理这个问题,甚至可能以不同的方式?
GET myindex/myobject/_search
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"word_count": {
"name": {
"lte": 3
}
}
}
]
}
},
"query": {
"match_all" : { }
}
}
}
}
您可以使用 token_count
数据类型来索引给定字段中的标记数,然后在该字段上进行搜索。
# 1. create the index/mapping with a token_count field
PUT myindex
{
"mappings": {
"myobject": {
"properties": {
"name": {
"type": "string",
"fields": {
"word_count": {
"type": "token_count",
"analyzer": "standard"
}
}
}
}
}
}
}
# 2. index some documents
PUT index/myobject/1
{
"name": "The quick brown fox"
}
PUT index/myobject/2
{
"name": "brown fox"
}
# 3. the following query will only return document 2
POST myindex/_search
{
"query": {
"range": {
"name.word_count": {
"lt": 3
}
}
}
}