我在使用Elasticsearch查询时遇到问题。我希望能够对结果进行排序,但是elasticsearch忽略了排序标签。这是我的查询:
{
"sort": [{
"title": {"order": "desc"}
}],
"query":{
"term": { "title": "pagos" }
}
}
但是,当我删除查询部分并仅发送排序标签时,它就可以工作。谁能指出正确的方法?
我还尝试了以下查询,这是我所拥有的完整查询:
{
"sort": [{
"title": {"order": "asc"}
}],
"query":{
"bool":{
"should":[
{
"match":{
"title":{
"query":"Pagos",
"boost":9
}
}
},
{
"match":{
"description":{
"query":"Pagos",
"boost":5
}
}
},
{
"match":{
"keywords":{
"query":"Pagos",
"boost":3
}
}
},
{
"match":{
"owner":{
"query":"Pagos",
"boost":2
}
}
}
]
}
}
}
设定值
{
"settings": {
"analysis": {
"filter": {
"autocomplete_filter": {
"type": "ngram",
"min_gram": 3,
"max_gram": 15,
"token_chars": [
"letter",
"digit",
"punctuation",
"symbol"
]
}
},
"analyzer": {
"default" : {
"tokenizer" : "standard",
"filter" : ["standard", "lowercase", "asciifolding"]
},
"autocomplete": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"asciifolding",
"autocomplete_filter"
]
}
}
}
}
}
对应
{
"objects": {
"properties": {
"id": { "type": "string", "index": "not_analyzed" },
"type": { "type": "string" },
"title": { "type": "string", "boost": 9, "analyzer": "autocomplete", "search_analyzer": "standard" },
"owner": { "type": "string", "boost": 2 },
"description": { "type": "string", "boost": 4 },
"keywords": { "type": "string", "boost": 1 }
}
}
}
提前致谢!
文档中的 “标题” 字段是一个 分析的
字符串字段,也是一个多值字段,这意味着Elasticsearch会将字段内容拆分为令牌,并将其分别存储在索引中。您可能想按字母顺序在第一项上对
“标题” 字段进行排序,然后在第二项上依此类推,依此类推,但是elasticsearch在排序时并没有此信息可供使用。
因此,您可以从以下位置更改 “标题” 字段的映射:
{
"title": {
"type": "string", "boost": 9, "analyzer": "autocomplete", "search_analyzer": "standard"
}
}
变成这样的多字段映射:
{
"title": {
"type": "string", "boost": 9, "analyzer": "autocomplete", "search_analyzer":"standard",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
现在,基于已 分析的 “ title” 字段执行搜索, 并 基于 not_analyzed的 “
title.raw”
字段进行排序
{
"sort": [{
"title.raw": {"order": "desc"}
}],
"query":{
"term": { "title": "pagos" }
}
}
它在这里得到了很好的解释:字符串排序和多字段
问题内容: 根据上述问题,我用Val给定的脚本进行的elasticsearch查询在最后一周之前都可以正常工作。我们已经升级了ES版本,但突然停止了工作。 现在突然我的ES停止使用脚本中包含“ as Integer”的代码。任何人都可以检查和帮助。 我尝试了给定的查询,现在它抛出以下异常。 我作为参数传递的查询是: 由于我的索引器在该字段中包含1、2、4、6、14个值。但是执行完此查询后,我只得到
问题内容: 我在解决此mongodb(猫鼬)问题时遇到很多困难。 存在此模式“推荐”(用户名,roomId,ll和日期),其集合包含对用户的推荐。 我需要获取最推荐的房间列表(按roomId)。下面是模式和我尝试过的猫鼬查询解决方案。 问题答案: 从聚合管道返回的结果只是普通对象。因此,您将排序作为流水线阶段而不是作为单独的操作进行: 因此,也可以使用多种流水线运算符 或 或 和其他东西。这些可以
我目前有一个查询,它使用MongoTemplate的findAll()方法返回集合中的所有文档。我想对这些结果进行排序,但看不到任何方法。我看到我可以使用find()和一个查询参数并调用。with(Sort Sort),但是在这个场景中,我如何设置查询以返回所有文档?我会同意使用任何一种方法。
问题内容: 我如何执行搜索,排除字段具有特定值的结果? 我有一个Reddit评论数据库,我想找到提及比特币的信息,但不包括bitcoin subreddit。 错误很长,无法在此处发布。https://gist.github.com/kylelk/feca416156712eebad3e 问题答案: 这是愚蠢的错误, 您必须在query中包含过滤查询。这是修改 希望这可以帮助!!
问题内容: 假设我将这样的文档存储在ElasticSearch中: 假设我使用location = CA进行搜索,如何根据“标签”中项目的数量对结果进行排序? 我想在首页中列出标签数量最多的人。 问题答案: 您可以为包含标签数量的其他字段建立索引,然后在其上轻松地对结果进行排序。否则,如果您愿意在查询时付出一点性能成本,那么有个不错的解决方案不需要重新索引数据:您可以根据如下脚本进行排序: 从基于
目标 我想问一下这个问题: null 我想解决方案可能非常简单,就像查询本身一样,但这些是我在这种基础上迈出的第一步。提前感谢你在这方面的任何帮助。