Полнотекстовый поиск Couchbase (FTS) - как мне вернуть данные корзины? - PullRequest
1 голос
/ 07 июня 2019

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

Я пытался проиндексировать объект, который я хочу получить, с помощью карты типов наследования, но, похоже, ничего не возвращается с fields: ["*"], кроме сопоставления типов default. Документы создают впечатление, что это возможно с Type Mapping , но мне кажется, что-то не хватает. Единственное решение, которое я могу придумать, - это сохранить полученные идентификаторы и выполнить их для 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": {}
}

1 Ответ

1 голос
/ 07 июня 2019

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

Если вы используете пользовательское сопоставление типов и индексируете в нем дочерние поля выбора, вы можете установить "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, вы найдете параметр "store_dynamic" в разделе Advanced.

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

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

...