“Unknown Error: mango_idx :: {no_usable_index,missing_sort_index}”}

僤鯓⒐⒋嵵緔 提交于 2020-01-05 04:28:08

问题


I have the following query:

{'type': 'text', 
 'name': 'album-rating-text', 
 'index': {'fields': [
                      {'type': 'string', 'name': 'user_id'}, 
                      {'type': 'string', 'name': 'album_id'}, 
                      {'type': 'number', 'name': 'timestamp'}
]}}

Here is the query:

{'sort': [
           {'user_id': 'desc'}, 
           {'album_id': 'desc'}, 
           {'timestamp': 'desc'}
         ], 
 'limit': 1, 
 'fields': ['user_id', 'album_id', 'timestamp'], 
 'selector': {
              '$and': [
                        {'user_id': {'$eq': 'a@a.com'}},         
                        {'album_id': {'$in': ['bf129f0d', '380e3a05'
                      ]
}}]}}

The error:

{ 
 "error":"unknown_error",
 "reason":"Unknown Error: mango_idx :: {no_usable_index,missing_sort_index}"
}

I've seen a similar question however, all the fields that I'm indexing on are in my sort list.


Update:

As a workaround, I attempted to simplify by dropping the timestamp field:

{"type": "text", 
 "name": "album-rating-text", 
 "index": {"fields": [
               {"type": "string", "name": "user_id"}, 
               {"type": "string", "name": "album_id"}
 ]}}

And query as so ...

{"selector": {"$and": [
                   {"user_id": {"$eq": "a@a.com"}}, 
                   {"album_id": {"$in": ["bf129f0d", "380e3a05"]}
              }]}, 
 "fields": ["user_id", "album_id"]}

I get the following error:

 {"warning":"no matching index found, create an index to optimize query time",
"docs":[
]}

回答1:


To use sort function for a custom field, that field needs to be manually registered to "Query-index".

Cloudant doesn't do this, because it's resource consuming:

"The example in the editor shows how to index the field "foo" using the json type index. You can automatically index all the fields in all of your documents using a text type index with the syntax '{ "index": {}, "type": "text" }', Note that indexing all fields can be resource consuming on large data sets."

You can do this using the Cloudant dashboard. Go to your database and look for "Queryable indexes". Click Edit.

Add your field to the default template:

{
  "index": {
    "fields": [
      "user_id"
    ]
  },
  "type": "json"
}

Press "Create index"

Field "user_id" is now queryable, and you can now use sort-function to it. All fields need to be add manually, or you can register all fields as Query-index with: { "index": {}, "type": "text" }

Video instructions for creating Query-index: https://www.youtube.com/watch?v=B3ZkxSFau8U




回答2:


Try using a JSON index instead of the text index:

{
    "type": "json", 
    "name": "album-rating-text", 
    "index": {
        "fields": ["user_id", "album_id", "timestamp"]
    }
}



回答3:


If I remember correct, my query requirements changed and I chose to use a standard Cloudant Search index instead of a Mango index.



来源:https://stackoverflow.com/questions/40584988/unknown-error-mango-idx-no-usable-index-missing-sort-index

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!