Message Boards

How can search ddmFieldName correctly in 7.3

Alain Barrero, modified 3 Years ago.

How can search ddmFieldName correctly in 7.3

New Member Posts: 2 Join Date: 3/4/21 Recent Posts

I´m trying to search in structure fields like this:

            {
              "ddmFieldName" : "ddm__keyword__36316__date_es_ES",
              "ddmValueFieldName" : "ddmFieldValueKeyword_es_ES",
              "ddmFieldValueKeyword_es_ES_String_sortable" : "2021-03-31",
              "ddmFieldValueKeyword_es_ES" : "2021-03-31"
            },
            {
              "ddmFieldName" : "ddm__keyword__36316__revision_es_ES",
              "ddmValueFieldName" : "ddmFieldValueKeyword_es_ES",
              "ddmFieldValueKeyword_es_ES_String_sortable" : "true",
              "ddmFieldValueKeyword_es_ES" : "true"
            },

How it makes range search in date and exact term in revision?

thumbnail
Daniel Martínez Cisneros, modified 2 Years ago.

RE: How can search ddmFieldName correctly in 7.3

Junior Member Posts: 38 Join Date: 7/1/11 Recent Posts

Hi Alain, 

with the new Search Api all the field asociated to a structure are saved in ddmFieldArray as an array, as described below: 

"ddmFieldArray" : [
            {
              "ddmFieldName" : "ddm__keyword__38308__apellidos_en_US",
              "ddmValueFieldName" : "ddmFieldValueKeyword_en_US",
              "ddmFieldValueKeyword_en_US_String_sortable" : "gonzalez montero",
              "ddmFieldValueKeyword_en_US" : "Gonzalez Montero"
            },
            {
              "ddmFieldName" : "ddm__keyword__38308__empleado_en_US",
              "ddmValueFieldName" : "ddmFieldValueKeyword_en_US",
              "ddmFieldValueKeyword_en_US_String_sortable" : "101334",
              "ddmFieldValueKeyword_en_US" : "101334"
            },
            {
              "ddmFieldName" : "ddm__keyword__38308__nombre_en_US",
              "ddmValueFieldName" : "ddmFieldValueKeyword_en_US",
              "ddmFieldValueKeyword_en_US_String_sortable" : "laura",
              "ddmFieldValueKeyword_en_US" : "Laura"
            }
          ],

For filter some of its values you have to use NestedQuery and add your DateRangeTermQuery to nested:

BooleanQuery booleanQueryEmp = queries.booleanQuery();

DateRangeTermQuery dateRangeTerm = queries.dateRangeTerm("ddmFieldArray.ddmFieldValueKeyword_es_ES",true,true,"timestampFrom", "timestampTo");

booleanQueryEmp.addMustQueryClauses(dateRangeTerm);

NestedQuery nestedQuery = queries.nested("ddmFieldArray", booleanQueryEmp);

 

And finally add nested query to the global booleanQuery prior to build the query: 


booleanQuery.addMustQueryClauses(titleQuery, classNameQuery, lastContentQuery, ddmStructureKeyQuery, nestedQuery);

Have a look into this link:

  • https://help.liferay.com/hc/es/articles/360029046411-Building-Search-Queries-and-Filters#example
  • https://github.com/liferay/liferay-portal/blob/7.2.x/modules/apps/portal-search/portal-search-api/src/main/java/com/liferay/portal/search/query/Queries.java 

Hope this helps