在 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 过滤的信息:
- Liferay 文档:https://portal.liferay.dev/docs/7-2/frameworks/-/knowledge_base/f/search-queries-and-filters
- 计算器 1:
- 计算器溢出 2:
- Liferay 论坛 1:https://community.liferay.com/forums/-/message_boards/message/108179215
- Liferay 论坛 2:https://community.liferay.com/forums/-/message_boards/message/86997787
- Liferay 论坛 3:https://community.liferay.com/forums/-/message_boards/message/84031533
(注:部分链接与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。
我创建了一种结构,其后是网页内容。结构 包含 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 过滤的信息:
- Liferay 文档:https://portal.liferay.dev/docs/7-2/frameworks/-/knowledge_base/f/search-queries-and-filters
- 计算器 1:
- 计算器溢出 2:
- Liferay 论坛 1:https://community.liferay.com/forums/-/message_boards/message/108179215
- Liferay 论坛 2:https://community.liferay.com/forums/-/message_boards/message/86997787
- Liferay 论坛 3:https://community.liferay.com/forums/-/message_boards/message/84031533
(注:部分链接与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。