我创建了一个结构,后面是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);
答案 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。