Поиск по таксономии в CrafterCMS

#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"]}}]}}}'