在Liferay中搜索

时间:2019-12-16 13:02:11

标签: elasticsearch search liferay liferay-dxp liferay-7.2

我创建了一个结构,后面是Web内容。结构包含2个字段。一个是区域名称,第二个是邮政编码。我将数据存储在Web内容中,然后再存储此结构。 我想根据用户输入的邮政编码或区域名称搜索数据。我想向用户提供一个下拉列表,以选择要按邮政编码/按区域名称进行搜索的条件。

问题是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);

1 个答案:

答案 0 :(得分:1)

您必须使用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进行硬编码,则在导出/导入结构时可能会遇到问题,因为在导入过程中会重新计算structureId。