#elasticsearch #liferay #crafter-cms
#elasticsearch #liferay #crafter-cms
Вопрос:
Редакционная схема CrafterCMS показывает использование таксономии для таргетинга контента. Используя поле categories_o статьи, я могу назначить от 0 до 4 категорий. Индекс Elasticsearch для этого поля выглядит следующим образом:
"categories_o" : {
"item" : [
{
"key" : "style",
"value_smv" : "Style"
},
{
"key" : "technology",
"value_smv" : "Technology"
}
]
},
Как мне искать статьи по одной или нескольким категориям?
Встроенная структура категоризации Liferay создает индекс Elasticsearch для аналогичного поля, подобного этому:
"assetCategoryIds" : [ "644879", "644884", "644889", "6207544", "6207546", "6207550" ],
Затем вы можете использовать конструкцию запроса Elasticsearch «термины» для поиска документов, относящихся к нескольким (а не только к одной) категориям:
"query": { "bool": {
"must": { "match_all": {} },
"filter": {
"bool": {
"must": [
{"terms": {"assetCategoryIds": ["644889","6207550"]}},
...
Я ищу способ выполнить тот же поиск в CrafterCMS.
Ответ №1:
Вы можете использовать тот же запрос, используя полный путь к полю:
"terms": {"categories_o.item.key": [...]}
Ответ №2:
Я протестировал его, и этот запрос работает:
alias jcurl='curl -H "Content-Type: application/json"'
jcurl -sXPOST "localhost:9201/sample2-preview_v1/_search?pretty" -d '
{"size":1,"query":{"bool":{"must":[
{"terms":{"categories_o.item.key":["technology","style"]}}]}}}'