How to search in a Collection with unknown structure?

十年热恋 提交于 2019-12-11 06:58:52

问题


I spent several hours reading through docs and forums, trying to find a solution for the following problem:

In A Mongo database, I have a collection with some unstructured data:

{"data" : "some data" , "_id" : "497ce96f395f2f052a494fd4"}

{"more_data" : "more data here" ,"recursive_data": {"some_data": "even more data here", "_id" : "497ce96f395f2f052a4323"}

{"more_unknown_data" : "string or even dictionaries" , "_id" : "497ce96f395f2f052a494fsd2"}

...

The catch is that the elements in this collections don't have a predefined structure and they can be unlimited levels.

My goal is to create a query, that searches through the collection and finds all the elements that match a regular expression( in both the keys and the values ).

For example, if I have a regex: '^even more' - It should return all the elements that have the string "even more" somewhere in the structure. In this case - that will be the second one.


回答1:


Simply add an array to each object and populate it with the strings you want to be able to search on. Typically I'd lowercase those values to make case-insensitive search easy.

e.g. Tags : ["copy of string 1", "copy of string 2", ...]

You can extend this technique to index every word of every element. Sometimes I also add the field with an identifier in front of it, e.g. "genre:rock" which allows searches for values in specific fields (choose the ':' character carefully).

Add an index on this array and now you have the ability to search for any word or phrase in any document in the collection and you can search for "genre:rock" to search for that value in a specific field.




回答2:


Ever if you will find a way to do this you will still face problem of slow searches, becouse there are no indexes

I had similar problem and solution was to create additional database(on same engine or any other more suitable for search) and to fill it with mongo keys and combined to one text field data. And to update it whenever mongodb data updates.

If it suitable you can also try to go this way...At least search works very fast. (I used postgresql as search backend)



来源:https://stackoverflow.com/questions/8205847/how-to-search-in-a-collection-with-unknown-structure

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