This post shows you how to query Liferay’s database and see which Documents and Media files are marked ‘searchable’. For these examples, I was using SQL Server and did not validate the queries work on other databases. They are simple enough to port if you are running Oracle, DB2, or any other major relational database platform.
Figuring out how to query Liferay’s database for this information is not straightforward. My original expectation was for the DLFileEntry table to have an ‘indexable’ column similar to the JournalArticle table. “No big deal”, I thought to myself, “It must be on the DLFileVersion table”. WRONG!!?! When I did not see the ‘indexable’ field on the DLFileVersion table, and no references in ‘typeSettings’ data, I started feeling a bit uneasy. How the heck is this info stored?
Finding any information on this topic prompted this blog post to help you query Liferay’s database to find Documents and Media marked as searchable. I learned that Liferay uses Expando attributes to identify which documents are marked ‘searchable’.
Basic Documents and Media Query
Here is the basic starter to help you query Liferay’s database for the current documents and media entries.
SELECT FE.fileEntryId
,FE.version
,FE.title
,EV.[data_] AS 'searchable'
FROM [ExpandoValue] EV
INNER JOIN [ExpandoColumn] EC on EV.columnId = EC.columnId
INNER JOIN [DLFileVersion] FV on EV.classPk = FV.fileVersionId
INNER JOIN [DLFileEntry] FE on FE.fileEntryId = FV.fileEntryId
WHERE EV.classNameId = 10010
AND EC.name = 'searchable'
AND FE.version = FV.version
ORDER BY FV.fileEntryId, FV.version
This query should be enough to get a developer going or basic reporting.
Add Group_ and Organization_ tables to the query
For installations with multiple sites or organizations where content is stored, you will need to add joins on the
[Group_]
and
[Organization_]
tables. This will at least tell you where the documents are stored so someone can go into the Control Panel and find them.
SELECT G.name
,O.name
,FE.fileEntryId
,FE.version
,FE.title
,EV.[data_] AS 'searchable'
FROM [ExpandoValue] EV
INNER JOIN [ExpandoColumn] EC on EV.columnId = EC.columnId
INNER JOIN [DLFileVersion] FV on EV.classPk = FV.fileVersionId
INNER JOIN [DLFileEntry] FE on FE.fileEntryId = FV.fileEntryId
INNER JOIN [Group_] G on FE.groupId = G.groupId
LEFT OUTER JOIN [Organization_] O on O.organizationId = G.classPK
WHERE EV.classNameId = 10010
AND EC.name = 'searchable'
AND FE.version = FV.version
ORDER BY FV.fileEntryId, FV.version
Take note that when you query Liferay’s database with the queries above, you will not get all versions of the files. These queries only return the current file version.
Query for file version history
This next query will show you how to query Liferay’s database for the full file version history.
SELECT G.name
,O.name
,FE.fileEntryId
,FV.version
,FE.title
,EV.[data_] AS 'searchable'
FROM [ExpandoValue] EV
INNER JOIN [ExpandoColumn] EC on EV.columnId = EC.columnId
INNER JOIN [DLFileVersion] FV on EV.classPk = FV.fileVersionId
INNER JOIN [DLFileEntry] FE on FE.fileEntryId = FV.fileEntryId
INNER JOIN [Group_] G on FE.groupId = G.groupId
LEFT OUTER JOIN [Organization_] O on O.organizationId = G.classPK
WHERE EV.classNameId = 10010
AND EC.name = 'searchable'
ORDER BY FV.fileEntryId, FV.version