0

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

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

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

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);

4

1 回答 1

2

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

Web 内容结构的每个字段都被转换为 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}

注意:为了获取结构ID,您应该通过结构键查询DDMStructure过滤,如果您对结构ID进行硬编码,则在导出/导入结构时可能会遇到问题,因为结构ID在导入过程中会重新计算。

于 2019-12-17T07:37:03.973 回答