1

I created a collection and indexed the field as "text" in mondo shell. Then I query documents with the following parameters:

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

and get error:

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"

But in mongo shell everything is OK. I got the rigth response on this query:

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

What's wrong? I did everything by these tutorials:

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

4

1 回答 1

1

我建议使用 RESTHeart 而不是 Mongo shell 重新创建索引。

首先,使用 shell 删除索引,然后按照以下示例重新创建:https ://restheart.org/learn/indexes/

例如,您可以tags使用以下内容为集合创建命名索引:

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

HTTP/1.1 201 Created

那么请让我们知道它是否有效。

更新

这是我为成功测试 RESTHeart 上的全文搜索所做的工作(顺便说一句,我使用的是 httpie 客户端,但 curl 的工作方式类似):

  1. cd 进入 RESTHeart 文件夹
  2. 启动 dockerized RESTHeartdocker-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”的集合索引,它使用 JSON 文档中的“about”元素进行文本索引和搜索

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文件。

我建议将上述步骤与您正在执行的操作进行比较,看看是否存在显着差异。

于 2018-09-18T15:32:38.497 回答