我目前正在寻找一种方法来返回某个字段中最多包含n个单词的文档。
对于包含“name”字段中少于三个单词的文档的结果集,查询看起来像这样,但据我所知,没有像word_count这样的内容。
有没有人知道如何处理这个问题,甚至可能以不同的方式处理?
GET myindex/myobject/_search
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"word_count": {
"name": {
"lte": 3
}
}
}
]
}
},
"query": {
"match_all" : { }
}
}
}
}
答案 0 :(得分:2)
您可以使用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
}
}
}
}