Sfoglia il codice sorgente

Merge pull request #2440 from visuddhinanda/development

Development
visuddhinanda 4 giorni fa
parent
commit
c99aa37f79

+ 2 - 2
api-v13/app/Console/Commands/IndexTipitaka.php

@@ -18,7 +18,7 @@ class IndexTipitaka extends Command
 {
     /**
      * The name and signature of the console command.
-     * php artisan opensearch:index-tipitaka 93 --para=6 --granularity=chapter
+     * php artisan opensearch:index-tipitaka 93 --para=6 --granularity=paragraph
      * @var string
      */
     protected $signature = 'opensearch:index-tipitaka
@@ -253,7 +253,7 @@ class IndexTipitaka extends Command
             'bold_multi' => implode(" ", $bold_multi),
             'related_id' => $related_id,
             'category' => 'pali', // Assuming Pali paragraphs are sutta; adjust as needed
-            'language' => 'pali',
+            'language' => 'pi',
             'updated_at' => now()->toIso8601String(),
             'granularity' => 'session',
             'path' => $this->getPathTitle(json_decode($paraInfo['path'])),

+ 18 - 15
api-v13/app/Services/OpenSearchService.php

@@ -163,8 +163,11 @@ class OpenSearchService
         'mappings' => [
             'properties' => [
                 'id' => ['type' => 'keyword'],
-                'resource_id' => ['type' => 'text', 'fields' => ['keyword' => ['type' => 'keyword', 'ignore_above' => 256]]],
-                'resource_type' => ['type' => 'text', 'fields' => ['keyword' => ['type' => 'keyword', 'ignore_above' => 256]]],
+                // 分类维度一律 keyword:它们是枚举值,不该被分词。
+                // 若声明成 text,'zh-Hans' 会被切成 zh + hans,查 language=zh 就会把
+                // zh-Hans 的文档一并捞进来(实测 401 vs 410),而且不报错。
+                'resource_id' => ['type' => 'keyword'],
+                'resource_type' => ['type' => 'keyword'],
 
                 // ----------------------------------------------------------------
                 // title
@@ -325,11 +328,11 @@ class OpenSearchService
                 'path' => ['type' => 'text', 'analyzer' => 'standard'],
                 'page_refs' => ['type' => 'keyword'],
                 'tags' => ['type' => 'keyword'],
-                'category' => ['type' => 'text', 'fields' => ['keyword' => ['type' => 'keyword', 'ignore_above' => 256]]],
+                'category' => ['type' => 'keyword'],
                 'author' => ['type' => 'text'],
-                'language' => ['type' => 'text', 'fields' => ['keyword' => ['type' => 'keyword', 'ignore_above' => 256]]],
+                'language' => ['type' => 'keyword'],
                 'updated_at' => ['type' => 'date'],
-                'granularity' => ['type' => 'text', 'fields' => ['keyword' => ['type' => 'keyword', 'ignore_above' => 256]]],
+                'granularity' => ['type' => 'keyword'],
                 'metadata' => [
                     'properties' => [
                         'APA' => ['type' => 'text', 'index' => false],
@@ -675,19 +678,19 @@ class OpenSearchService
         $filters = [];
 
         if (! empty($params['resourceType'])) {
-            $filters[] = ['term' => ['resource_type.keyword' => $params['resourceType']]];
+            $filters[] = ['term' => ['resource_type' => $params['resourceType']]];
         }
 
         if (! empty($params['resourceId'])) {
-            $filters[] = ['term' => ['resource_id.keyword' => $params['resourceId']]];
+            $filters[] = ['term' => ['resource_id' => $params['resourceId']]];
         }
 
         if (! empty($params['granularity'])) {
-            $filters[] = ['term' => ['granularity.keyword' => $params['granularity']]];
+            $filters[] = ['term' => ['granularity' => $params['granularity']]];
         }
 
         if (! empty($params['language'])) {
-            $filters[] = ['term' => ['language.keyword' => $params['language']]];
+            $filters[] = ['term' => ['language' => $params['language']]];
         }
 
         if (! empty($params['category'])) {
@@ -699,7 +702,7 @@ class OpenSearchService
 
             // 必须匹配全部:为每个 category 创建一个 term 条件
             foreach ($categories as $category) {
-                $filters[] = ['term' => ['category.keyword' => $category]];
+                $filters[] = ['term' => ['category' => $category]];
             }
         }
 
@@ -767,16 +770,16 @@ class OpenSearchService
                 : $query,
             'aggs' => [
                 'resource_type' => [
-                    'terms' => ['field' => 'resource_type.keyword'],
+                    'terms' => ['field' => 'resource_type'],
                 ],
                 'language' => [
-                    'terms' => ['field' => 'language.keyword'],
+                    'terms' => ['field' => 'language'],
                 ],
                 'category' => [
-                    'terms' => ['field' => 'category.keyword'],
+                    'terms' => ['field' => 'category'],
                 ],
                 'granularity' => [
-                    'terms' => ['field' => 'granularity.keyword'],
+                    'terms' => ['field' => 'granularity'],
                 ],
             ],
         ];
@@ -1124,7 +1127,7 @@ class OpenSearchService
         $dsl = ['suggest' => $suggests];
 
         if ($language) {
-            $dsl['query'] = ['term' => ['language.keyword' => $language]];
+            $dsl['query'] = ['term' => ['language' => $language]];
         }
 
         $response = $this->client->search([

+ 1 - 1
api-v13/config/mint.php

@@ -168,7 +168,7 @@ return [
         ],
     ],
     'opensearch' => [
-        'index' => 'wikipali_20260516',
+        'index' => 'wikipali_20260813',
         'config' => [
             'scheme' => env('OPENSEARCH_SCHEME', 'http'),
             'host' => env('OPENSEARCH_HOST', '127.0.0.1'),