Как вложенный запрос в mongodb? - PullRequest
0 голосов
/ 06 апреля 2020

Как индексировать вложенные объекты в Pymon go, чтобы я мог выполнять полнотекстовый поиск. Например, у меня есть такой объект коллекции ...

{
   "_id":"ObjectId("   "5e8b0fa1c869790699efdb2d"   ")",
   "xmlfileid": "334355343343223567",
   "threads":{
      "threads_participants":{
         "participant":[
            {
               "@reference": rits_dbx_1
            },
            {
               "@reference": rits_dbx_2
            }
         ]
      },
      "thread":{
         "namedAnchor":"{' ': 'NORP', 'Ho': 'PERSON', 'Lets': 'PERSON', 'Boris Johnson': 'PERSON', 'Britain': 'GPE'}",
         "selectedText":{
            "fragment":[
               {
                  "@class":"next_steps",
                  "#text":"rits_dbx_1 said hello this is a good site."
               },
               {
                  "@class":"other",
                  "#text":"rits_dbx_1 said ho ho."
               },
               {
                  "@class":"other",
                  "#text":"rits_dbx_1 said lets put some meaningful stuff here."
               },
            ]
         }
      }
   }
}

Я разместил окно поиска на своем веб-сайте, и когда пользователь вводит #text в поле поиска, я хочу отобразить #text и class и xmlfileid

До сих пор я создал индекс, используя следующую команду. И я не знаю, это правильный способ получить результат, а также, пожалуйста, помогите с запросом тоже.

db.xml_collection.createIndex({"threads.thread.selectedText.fragment": "text"})

В моем python коде у меня есть это, но оно ничего не печатает

result = collection.find({"$text": {"$search": "ho ho"}})

1 Ответ

0 голосов
/ 06 апреля 2020

Ваш индекс неверен.

MongoDB предоставляет text индексы для поддержки запросов текстового поиска по строковому содержимому. текст индексы могут включать любое поле, значением которого является строка или массив строковых элементов.

https://docs.mongodb.com/manual/core/index-text/

Если вы хотите индексировать только поле #text, измените свой индекс на следующее:

db.xml_collection.createIndex({"threads.thread.selectedText.fragment.#text": "text"})

Также вы можете создать Текстовый индекс с подстановочными знаками , и MongoDB будет индексировать все пары key:value (где value - строка / массив строк)

db.xml_collection.createIndex({"$**": "text"})

Примечание: Вам необходимо удалить все предыдущие text индексы для этой коллекции

...