Просмотр исходного кода

refs #82628: fix search keyword result sorting
- fix additional changes for resolve conflict

NEEDLEMAN3\tatsu 4 лет назад
Родитель
Сommit
1905a19f1b
2 измененных файлов с 23 добавлено и 84 удалено
  1. 0 35
      packages/app/src/server/routes/search.js
  2. 23 49
      packages/app/src/server/service/search.ts

+ 0 - 35
packages/app/src/server/routes/search.js

@@ -153,44 +153,9 @@ module.exports = function(crowi, app) {
       return res.json(ApiResponse.error(err));
     }
 
-// ---local changes---
-      // get page data
-      const pageIds = sortedSearchResult.data.map((page) => { return page._id });
-      const findPageResult = await Page.findListByPageIds(pageIds);
-
-      // set meta data
-      result.meta = sortedSearchResult.meta;
-      result.totalCount = findPageResult.totalCount;
-
-      // set search result page data
-      result.data = sortedSearchResult.data.map((data) => {
-        const pageData = findPageResult.pages.find((pageData) => {
-          return pageData.id === data._id;
-        });
-
-        // add tags and seenUserCount to pageData
-        pageData._doc.tags = data._source.tag_names;
-        pageData._doc.seenUserCount = (pageData.seenUsers && pageData.seenUsers.length) || 0;
-
-        // serialize lastUpdateUser
-        if (pageData.lastUpdateUser != null && pageData.lastUpdateUser instanceof User) {
-          pageData.lastUpdateUser = serializeUserSecurely(pageData.lastUpdateUser);
-        }
-
-        // generate pageMeta data
-        const pageMeta = {
-          bookmarkCount: data._source.bookmark_count || 0,
-          elasticSearchResult: data.elasticSearchResult,
-        };
-
-        return { pageData, pageMeta };
-      });
-// ---local changes---
-// ---remote changes---
     let result;
     try {
       result = await searchService.formatSearchResult(searchResult, delegatorName);
-// ---remote changes---
     }
     catch (err) {
       return res.json(ApiResponse.error(err));

+ 23 - 49
packages/app/src/server/service/search.ts

@@ -387,63 +387,37 @@ class SearchService implements SearchQueryParser, SearchResolver {
     const User = this.crowi.model('User');
     const result = {} as FormattedSearchResult;
 
-    // create score map for sorting
-    // key: id , value: score
-    const scoreMap = {};
-    for (const esPage of searchResult.data) {
-      scoreMap[esPage._id] = esPage._score;
-    }
+    // get page data
+    const pageIds = searchResult.data.map((page) => { return page._id });
+    const findPageResult = await Page.findListByPageIds(pageIds);
 
-    const ids = searchResult.data.map((page) => { return page._id });
-    const findResult = await Page.findListByPageIds(ids);
+    // set meta data
+    result.meta = searchResult.meta;
+    result.totalCount = findPageResult.totalCount;
 
-    // add tags data to page
-    findResult.pages.map((pageData) => {
-      const data = searchResult.data.find((data) => {
+    // set search result page data
+    result.data = searchResult.data.map((data) => {
+      const pageData = findPageResult.pages.find((pageData) => {
         return pageData.id === data._id;
       });
-      pageData._doc.tags = data._source.tag_names;
-      return pageData;
-    });
-
-    result.meta = searchResult.meta;
-    result.totalCount = findResult.totalCount;
-    result.data = findResult.pages
-      .map((pageData) => {
-        if (pageData.lastUpdateUser != null && pageData.lastUpdateUser instanceof User) {
-          pageData.lastUpdateUser = serializeUserSecurely(pageData.lastUpdateUser);
-        }
 
-        const data = searchResult.data.find((data) => {
-          return pageData.id === data._id;
-        });
-
-        // increment elasticSearchResult
-        let elasticSearchResult;
-        const highlightData = data._highlight;
-        if (highlightData != null) {
-          const snippet = highlightData['body.en'] || highlightData['body.ja'] || '';
-          const pathMatch = highlightData['path.en'] || highlightData['path.ja'] || '';
-
-          elasticSearchResult = {
-            snippet: filterXss.process(snippet),
-            highlightedPath: filterXss.process(pathMatch),
-          };
-        }
+      // add tags and seenUserCount to pageData
+      pageData._doc.tags = data._source.tag_names;
+      pageData._doc.seenUserCount = (pageData.seenUsers && pageData.seenUsers.length) || 0;
 
-        const pageMeta = {
-          bookmarkCount: data._source.bookmark_count || 0,
-          elasticSearchResult,
-        };
+      // serialize lastUpdateUser
+      if (pageData.lastUpdateUser != null && pageData.lastUpdateUser instanceof User) {
+        pageData.lastUpdateUser = serializeUserSecurely(pageData.lastUpdateUser);
+      }
 
-        pageData._doc.seenUserCount = (pageData.seenUsers && pageData.seenUsers.length) || 0;
+      // generate pageMeta data
+      const pageMeta = {
+        bookmarkCount: data._source.bookmark_count || 0,
+        elasticSearchResult: data.elasticSearchResult,
+      };
 
-        return { pageData, pageMeta };
-      })
-      .sort((page1, page2) => {
-        // note: this do not consider NaN
-        return scoreMap[page2.pageData._id] - scoreMap[page1.pageData._id];
-      });
+      return { pageData, pageMeta };
+    });
 
     return result;
   }