1

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 中进行相同搜索的方法。

4

2 回答 2

1

我测试了它,这个查询有效:

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"]}}]}}}'
于 2021-01-08T17:00:52.913 回答
1

您可以使用字段的完整路径来使用相同的查询:

"terms": {"categories_o.item.key": [...]}
于 2021-01-08T16:12:04.657 回答