Полнотекстовый поиск Couchbase (FTS) - как вернуть данные корзины?

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

Я пробовал проиндексировать объект, который хочу извлечь, с помощью карты типов наследования, но похоже, что ничего не возвращается с fields: ["*"], кроме сопоставления типов default. Документы создают впечатление, что это должно быть возможно с Сопоставление типов, но мне кажется, что я чего-то упускаю. Единственное решение, которое я могу придумать, - это сохранить полученные идентификаторы и запустить их для запроса SQL с параметром USE KEYS [""].

Я использую Couchbase 5.1.

Объект Bucket

{
    "myData": {
        "foo": "bar"
    },
    "otherData": {
        "foo": "bar"
    }
}

Тело ответа

{
    "status": {
        "total": 6,
        "failed": 0,
        "successful": 6
    },
    "request": {
        "query": {
            "query": "ammonia"
        },
        "size": 3,
        "from": 0,
        "highlight": null,
        "fields": [
            "*"
        ],
        "facets": null,
        "explain": false,
        "sort": [
            "-_score"
        ],
        "includeLocations": false
    },
    "hits": [
        {
            "index": "x_lookup_4a3ce884b7959a52_aa574717",
            "id": "49648042171",
            "score": 2.3192631344475236,
            "sort": [
                "_score"
            ]
        },
        {
            "index": "x_lookup_4a3ce884b7959a52_aa574717",
            "id": "49648042174",
            "score": 2.3192631344475236,
            "sort": [
                "_score"
            ]
        },
        {
            "index": "x_lookup_4a3ce884b7959a52_aa574717",
            "id": "52735091636",
            "score": 2.2918152674612653,
            "sort": [
                "_score"
            ]
        }
    ],
    "total_hits": 256,
    "max_score": 2.3192631344475236,
    "took": 699827,
    "facets": {}
}

person mdawsondev    schedule 06.06.2019    source источник


Ответы (1)


Чтобы возвращать данные корзины как часть результатов поиска, необходимо сохранить проиндексированный контент. Как только об этом позаботятся, вы сможете использовать fields: ["*"] для получения индексированного сохраненного содержания обращения.

Если вы используете сопоставление настраиваемого типа и индексируете в нем выбранные дочерние поля, вы можете установить "store": true для каждого дочернего поля, которое вы хотите выдать в качестве результатов.

"types": {
    "medicine": {
        "dynamic": true,
        "enabled": true,
        "properties": {
            "content": {
                "enabled": true,
                "dynamic": false,
                "fields": [{
                    "name": "content",
                    "type": "text",
                    "store": true,
                    "index": true,
                    "include_term_vectors": true,
                    "include_in_all": true,
                    "docvalues": true
                }]
            }
        }
    }
}

Если вы просто используете динамическое сопоставление по умолчанию, вам нужно будет установить "store_dynamic": true, вот пример определения индекса выжженности ..

{
    "name": "sample",
    "type": "fulltext-index",
    "params": {
        "doc_config": {
            "docid_prefix_delim": "",
            "docid_regexp": "",
            "mode": "type_field",
            "type_field": "type"
        },
        "mapping": {
            "default_analyzer": "standard",
            "default_datetime_parser": "dateTimeOptional",
            "default_field": "_all",
            "default_mapping": {
                "dynamic": true,
                "enabled": true
            },
            "default_type": "_default",
            "docvalues_dynamic": true,
            "index_dynamic": true,
            "store_dynamic": true,
            "type_field": "_type"
        },
        "store": {
            "indexType": "scorch",
            "kvStoreName": ""
        }
    },
    "sourceType": "couchbase",
    "sourceName": "bucket_name",
    "sourceUUID": "",
    "sourceParams": {},
    "planParams": {
        "maxPartitionsPerPIndex": 171
    },
    "uuid": ""
}

Если вы создаете индекс из couchbase-UI, вы найдете параметр store_dynamic в разделе Advanced.

Теперь вы можете попробовать свой точный запрос по индексу, который определен любым из способов, описанных выше.

Обратите внимание, что сохранение содержимого увеличит дисковое пространство вашего индекса.

person Abhi    schedule 07.06.2019