在 Liferay 中搜索

Search in Liferay

我创建了一种结构,其后是网页内容。结构 包含 2 个字段。一个是区域名称,第二个是邮政编码。我将数据存储在网络内容中,然后是这种结构。 我想根据用户输入的邮政编码或地区名称搜索数据。我想向用户提供 select 标准的下拉列表,以便按邮政编码/地区名称进行搜索。

问题是网络内容数据以 XML 格式存储。因此,每当用户搜索关键字时,它都会 return 所有包含给定文本的结果。我想限制它。

我正在使用这种方法搜索数据。

List<JournalArticle> results = JournalArticleLocalServiceUtil.search( themeDisplay.getCompanyId(), //company id themeDisplay.getScopeGroupId(), // group id null, //folderIds Log list 0, //classname null, //version null,//title null, //description searchkeyword, // here put your keywords to search new Date(), // startDate new Date(), // endDate 0, //status null, //review Date QueryUtil.ALL_POS, QueryUtil.ALL_POS, null);

您必须使用 Liferay 搜索 API 直接搜索到 Elasticsearch,按 DDM 字段过滤。

webcontent 结构的每个字段都被转换为 Elasticsearch 端的 DDM 字段。

您在以下链接中有关于如何通过 DDM 字段查询 JournalArticle 过滤的信息:

(注:部分链接与6.2版本相关,但7.x查询应该很相似)

在 Liferay Portal 7.x 中,您需要查询的 DDM 字段的名称是内置在 DDMIndexerImpl.encodeName(...) 方法中的,请参阅:

https://github.com/liferay/liferay-portal-ee/blob/cba537c39989bbd17606e4de4aa6b9ab9e81b30c/modules/apps/dynamic-data-mapping/dynamic-data-mapping-service/src/main/java/com/liferay/dynamic/data/mapping/internal/util/DDMIndexerImpl.java#L243-L268

DDM 字段名称遵循以下模式:

  • 配置为关键字的字段:ddm__keyword__{structrureId}__{fieldname}_{locale}

  • 其他字段:ddm__{structrureId}__{fieldname}_{locale}

注意:为了获得structureId,你应该通过structureKey查询DDMStructure过滤,如果你硬编码structureId,你可能会遇到问题 export/import 结构,因为在导入过程中会重新计算structureId。