private QueryBuilder createFieldQuery(String field, String keywords) { SimpleQueryStringBuilder query = simpleQueryStringQuery(keywords) .field(field) // Values are indexed differently. Avoid errors when executing an IP search against a text field, for example. .lenient(true); // If field starts with the prefix 'objects.' it's part of the nested objects, thus, it must be wrapped inside a nested query. return field.startsWith("objects.") ? nestedQuery("objects", query, ScoreMode.Avg) : query; }
@Override protected AtomQuery parseMethodQueryWithExtraParams(MethodInvocation invocation, Map<String, String> extraParamMap) throws ElasticSql2DslException { String text = invocation.getParameterAsString(0); SimpleQueryStringBuilder simpleQueryString = QueryBuilders.simpleQueryStringQuery(text); String queryFields = null; if (invocation.getParameterCount() == 3) { queryFields = invocation.getParameterAsString(1); if (StringUtils.isNotBlank(queryFields)) { String[] tArr = queryFields.split(COLON); if ("fields".equalsIgnoreCase(tArr[0])) { for (String fieldItem : tArr[1].split(COMMA)) { simpleQueryString.field(fieldItem); } } } } if (MapUtils.isNotEmpty(extraParamMap)) { setExtraMatchQueryParam(simpleQueryString, extraParamMap); } return new AtomQuery(simpleQueryString); }
SimpleQueryStringBuilder query = QueryBuilders.simpleQueryStringQuery(queryString) .defaultOperator(defaultOperator) .analyzer(analyzer);
initialQuery = QueryBuilders.matchAllQuery(); } else if (searchableFields == null) { initialQuery = QueryBuilders.simpleQueryStringQuery(q); } else { initialQuery = QueryBuilders.multiMatchQuery(q, searchableFields).type(Type.CROSS_FIELDS)
break; case "simple_query_string": SimpleQueryStringBuilder querySimpleString = QueryBuilders.simpleQueryStringQuery((String) value); if (hint.index != null) { for (EsHint.FieldHint fieldHint : hint.getIndex()) {
private QueryBuilder buildObjectsQuery(FactSearchCriteria criteria) { BoolQueryBuilder rootQuery = boolQuery(); // Apply all simple filter queries on Objects. It's not necessary to wrap them inside a nested query because the // query is executed inside a nested aggregation which has direct access to the nested documents. if (!CollectionUtils.isEmpty(criteria.getObjectID())) { rootQuery.filter(termsQuery("objects.id", criteria.getObjectID())); } if (!CollectionUtils.isEmpty(criteria.getObjectTypeID())) { rootQuery.filter(termsQuery("objects.typeID", criteria.getObjectTypeID())); } if (!CollectionUtils.isEmpty(criteria.getObjectTypeName())) { rootQuery.filter(termsQuery("objects.typeName", criteria.getObjectTypeName())); } if (!CollectionUtils.isEmpty(criteria.getObjectValue())) { rootQuery.filter(termsQuery("objects.value", criteria.getObjectValue())); } // Apply keyword search on Object values if necessary. if (!StringUtils.isBlank(criteria.getKeywords()) && (criteria.getKeywordFieldStrategy().contains(FactSearchCriteria.KeywordFieldStrategy.objectValue) || criteria.getKeywordFieldStrategy().contains(FactSearchCriteria.KeywordFieldStrategy.all))) { // Values are indexed differently. Avoid errors by setting 'lenient' to true. applyFieldStrategy(rootQuery, field -> simpleQueryStringQuery(criteria.getKeywords()).field(field).lenient(true), SetUtils.set(FactSearchCriteria.KeywordFieldStrategy.objectValue), criteria.getKeywordMatchStrategy()); } return rootQuery; }