Запрос документов (текстовый поиск) в Restheart - PullRequest
0 голосов
/ 18 сентября 2018

Я создал коллекцию и проиндексировал поле как «текст» в оболочке mondo.Затем я запрашиваю документы со следующими параметрами:

localhost:8080/db/tags?filter={"$text":{"$search":"some text"}}

и получаю ошибку:

http status code 500
http status description "Internal Server Error"
message "Query failed with error code 2 and error message 'Too many text expressions' on server 127.0.0.1:27017"

Но в оболочке mongo все в порядке.Я получил точный ответ на этот запрос:

db.tags.find({"$text":{"$search":"some text"}})

Что не так?Я сделал все по этим урокам:

https://docs.mongodb.com/manual/reference/operator/query/text/#text-query-examples

https://softinstigate.atlassian.net/wiki/spaces/RH/pages/10747996/Query+Documents#QueryDocuments-filteringFiltering

1 Ответ

0 голосов
/ 18 сентября 2018

Я бы предложил воссоздать индекс с помощью RESTHeart вместо оболочки Mongo.

Сначала удалите индекс с помощью оболочки, затем создайте его снова, следуя примерам: https://restheart.org/learn/indexes/

Например, вы можете создать именованный индекс для коллекции tags с помощьюследующее:

PUT /db/tags/_indexes/<index_id> {"keys": {"title": "text" }}

HTTP/1.1 201 Created

Тогда, пожалуйста, дайте нам знать, если это работает.

Обновлено :

Вот что я сделал, чтобы успешно протестировать полныйтекстовый поиск в RESTHeart (кстати, я использую httpie-клиент, но curl будет работать аналогично):

  1. перейдите в папку RESTHeart
  2. запустите RESTHeart в доке с docker-compose up

Затем введите следующие команды:

Создание базы данных

http -a admin:changeit PUT http://localhost:8080/mydb

Создание коллекции

http -a admin:changeit PUT http://localhost:8080/mydb/sample

Примеры документов POST

http -a admin:changeit POST http://localhost:8080/mydb/sample < sample.json

Создание индекса коллекции с именем "about", который использует элемент "about" в документах JSON для индексации и поиска текста

http -j -a admin:changeit PUT http://localhost:8080/mydb/sample/_indexes/about keys:='{"about":"text"}}'

Проверка индекса

http -a admin:changeit GET http://localhost:8080/mydb/sample/_indexes

Выполнение успешного полнотекстового поиска

http -a admin:changeit GET http://localhost:8080/mydb/sample?filter='{"$text":{"$search":"\"Consequat fugiat commodo irure\""}}'

HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: Location, ETag, Auth-Token, Auth-Token-Valid-Until, Auth-Token-Location, X-Powered-By
Auth-Token: 240ym6d4sbxujjl8qa0ezslyfcpx7tmrjo4lfqmcxx9uirjjcs
Auth-Token-Location: /_authtokens/admin
Auth-Token-Valid-Until: 2018-09-19T07:46:37.717Z
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 793
Content-Type: application/json
Date: Wed, 19 Sep 2018 07:31:37 GMT
ETag: 5ba11d9aa7b11b0006d54c5f
X-Powered-By: restheart.org

{
    "_embedded": [
        {
            "_etag": {
                "$oid": "5ba11db6a7b11b0006d54c61"
            }, 
            "_id": "5ba11d3ffb91c9eb48eee9f2", 
            "about": "Nulla pariatur eu dolor ad fugiat cillum. Ex consectetur id velit officia veniam pariatur nisi ea et nisi aliquip reprehenderit adipisicing incididunt. Exercitation esse mollit in pariatur eiusmod veniam quis est consequat ad. Fugiat eu excepteur fugiat incididunt et. Consequat fugiat commodo irure id magna in magna minim non anim amet. Officia ipsum veniam excepteur consequat labore.", 
            "address": "923 Sheffield Avenue, Wescosville, California, 2455", 
            "age": 20, 
            "balance": "$1,335.75", 
            "company": "FLEXIGEN", 
            "email": "terra.gross@flexigen.name", 
            "eyeColor": "blue", 
            "favoriteFruit": "strawberry", 
            "friends": [
                {
                    "id": 0, 
                    "name": "May Rowland"
                }, 
                {
                    "id": 1, 
                    "name": "Schmidt Herman"
                }, 
                {
                    "id": 2, 
                    "name": "Saundra Shepard"
                }
            ], 
            "greeting": "Hello, Terra! You have 6 unread messages.", 
            "guid": "c529609b-8535-4aea-a386-d3861e3fe831", 
            "index": 3, 
            "isActive": false, 
            "latitude": "-43.467295", 
            "longitude": "114.929505", 
            "name": {
                "first": "Terra", 
                "last": "Gross"
            }, 
            "phone": "+1 (956) 474-2649", 
            "picture": "http://placehold.it/32x32", 
            "range": [
                0, 
                1, 
                2, 
                3, 
                4, 
                5, 
                6, 
                7, 
                8, 
                9
            ], 
            "registered": "Saturday, February 17, 2018 1:13 PM", 
            "tags": [
                "excepteur", 
                "velit", 
                "sint", 
                "sit", 
                "eu"
            ]
        }
    ], 
    "_etag": {
        "$oid": "5ba11d9aa7b11b0006d54c5f"
    }, 
    "_id": "sample", 
    "_returned": 1
}

Вы найдете файл sample.json.zip во вложении.

Я бы предложил сравнить вышеуказанные шаги счто вы делаете, и посмотрите, есть ли заметные различия.

...