mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-10-24 07:14:48 +00:00
Improve Search Relevancy
This commit is contained in:
parent
eda9ecc83f
commit
f0c86fda53
@ -171,7 +171,13 @@ public class SearchResource {
|
||||
"Fetch search results in hierarchical order of children elements. By default hierarchy is not fetched. Currently only supported for glossary_term_search_index.")
|
||||
@DefaultValue("false")
|
||||
@QueryParam("getHierarchy")
|
||||
boolean getHierarchy)
|
||||
boolean getHierarchy,
|
||||
@Parameter(
|
||||
description =
|
||||
"Explain the results of the query. Defaults to false. Only for debugging purposes.")
|
||||
@DefaultValue("false")
|
||||
@QueryParam("explain")
|
||||
boolean explain)
|
||||
throws IOException {
|
||||
|
||||
if (nullOrEmpty(query)) {
|
||||
@ -202,6 +208,7 @@ public class SearchResource {
|
||||
.applyDomainFilter(
|
||||
!subjectContext.isAdmin() && subjectContext.hasAnyRole(DOMAIN_ONLY_ACCESS_ROLE))
|
||||
.searchAfter(searchAfter)
|
||||
.explain(explain)
|
||||
.build();
|
||||
return searchRepository.search(request);
|
||||
}
|
||||
|
||||
@ -9,6 +9,9 @@ public class EntityBuilderConstant {
|
||||
public static final String ES_MESSAGE_SCHEMA_FIELD = "messageSchema.schemaFields.name";
|
||||
public static final String ES_MESSAGE_SCHEMA_FIELD_KEYWORD =
|
||||
"messageSchema.schemaFields.name.keyword";
|
||||
public static final String API_RESPONSE_SCHEMA_FIELD = "responseSchema.schemaFields.name";
|
||||
public static final String API_RESPONSE_SCHEMA_FIELD_KEYWORD =
|
||||
"responseSchema.schemaFields.name.keyword";
|
||||
public static final String ES_TAG_FQN_FIELD = "tags.tagFQN";
|
||||
|
||||
public static final String COLUMNS_NAME_KEYWORD = "columns.name.keyword";
|
||||
|
||||
@ -29,6 +29,7 @@ public class SearchRequest {
|
||||
private final List<String> domains;
|
||||
private final boolean getHierarchy;
|
||||
private final Object[] searchAfter;
|
||||
private final boolean explain;
|
||||
|
||||
public SearchRequest(ElasticSearchRequestBuilder builder) {
|
||||
this.query = builder.query;
|
||||
@ -48,6 +49,7 @@ public class SearchRequest {
|
||||
this.domains = builder.domains;
|
||||
this.applyDomainFilter = builder.applyDomainFilter;
|
||||
this.searchAfter = builder.searchAfter;
|
||||
this.explain = builder.explain;
|
||||
}
|
||||
|
||||
// Builder class for ElasticSearchRequest
|
||||
@ -70,6 +72,7 @@ public class SearchRequest {
|
||||
private boolean applyDomainFilter;
|
||||
private List<String> domains;
|
||||
private Object[] searchAfter;
|
||||
private boolean explain;
|
||||
|
||||
public ElasticSearchRequestBuilder(String query, int size, String index) {
|
||||
this.query = query;
|
||||
@ -153,6 +156,11 @@ public class SearchRequest {
|
||||
return this;
|
||||
}
|
||||
|
||||
public ElasticSearchRequestBuilder explain(boolean explain) {
|
||||
this.explain = explain;
|
||||
return this;
|
||||
}
|
||||
|
||||
public SearchRequest build() {
|
||||
return new SearchRequest(this);
|
||||
}
|
||||
|
||||
@ -13,6 +13,8 @@ import static org.openmetadata.service.Entity.GLOSSARY_TERM;
|
||||
import static org.openmetadata.service.Entity.QUERY;
|
||||
import static org.openmetadata.service.Entity.RAW_COST_ANALYSIS_REPORT_DATA;
|
||||
import static org.openmetadata.service.exception.CatalogGenericExceptionMapper.getResponse;
|
||||
import static org.openmetadata.service.search.EntityBuilderConstant.API_RESPONSE_SCHEMA_FIELD;
|
||||
import static org.openmetadata.service.search.EntityBuilderConstant.API_RESPONSE_SCHEMA_FIELD_KEYWORD;
|
||||
import static org.openmetadata.service.search.EntityBuilderConstant.COLUMNS_NAME_KEYWORD;
|
||||
import static org.openmetadata.service.search.EntityBuilderConstant.DATA_MODEL_COLUMNS_NAME_KEYWORD;
|
||||
import static org.openmetadata.service.search.EntityBuilderConstant.DOMAIN_DISPLAY_NAME_KEYWORD;
|
||||
@ -173,6 +175,7 @@ import org.openmetadata.service.search.elasticsearch.dataInsightAggregators.Elas
|
||||
import org.openmetadata.service.search.elasticsearch.dataInsightAggregators.ElasticSearchMostViewedEntitiesAggregator;
|
||||
import org.openmetadata.service.search.elasticsearch.dataInsightAggregators.ElasticSearchPageViewsByEntitiesAggregator;
|
||||
import org.openmetadata.service.search.elasticsearch.dataInsightAggregators.ElasticSearchUnusedAssetsAggregator;
|
||||
import org.openmetadata.service.search.indexes.APIEndpointIndex;
|
||||
import org.openmetadata.service.search.indexes.ContainerIndex;
|
||||
import org.openmetadata.service.search.indexes.DashboardDataModelIndex;
|
||||
import org.openmetadata.service.search.indexes.DashboardIndex;
|
||||
@ -1126,42 +1129,28 @@ public class ElasticSearchClient implements SearchClient {
|
||||
return jsonResponse.getJsonObject("aggregations");
|
||||
}
|
||||
|
||||
private static FunctionScoreQueryBuilder boostScore(
|
||||
QueryStringQueryBuilder queryBuilder, String query) {
|
||||
FunctionScoreQueryBuilder.FilterFunctionBuilder displayNameBoost =
|
||||
new FunctionScoreQueryBuilder.FilterFunctionBuilder(
|
||||
QueryBuilders.existsQuery("displayName.keyword"), // If displayName exists
|
||||
ScoreFunctionBuilders.weightFactorFunction(10.0f)); // Give it a high weight
|
||||
|
||||
FunctionScoreQueryBuilder.FilterFunctionBuilder nameBoost =
|
||||
new FunctionScoreQueryBuilder.FilterFunctionBuilder(
|
||||
QueryBuilders.boolQuery()
|
||||
.mustNot(
|
||||
QueryBuilders.existsQuery(
|
||||
"displayName.keyword")) // Only use name if displayName doesn't exist
|
||||
.must(QueryBuilders.matchQuery("name.keyword", query)),
|
||||
ScoreFunctionBuilders.weightFactorFunction(8.0f)); //
|
||||
private static FunctionScoreQueryBuilder boostScore(QueryStringQueryBuilder queryBuilder) {
|
||||
|
||||
FunctionScoreQueryBuilder.FilterFunctionBuilder tier1Boost =
|
||||
new FunctionScoreQueryBuilder.FilterFunctionBuilder(
|
||||
QueryBuilders.termQuery("tier.tagFQN", "Tier.Tier1"),
|
||||
ScoreFunctionBuilders.weightFactorFunction(5.0f));
|
||||
ScoreFunctionBuilders.weightFactorFunction(50.0f));
|
||||
|
||||
FunctionScoreQueryBuilder.FilterFunctionBuilder tier2Boost =
|
||||
new FunctionScoreQueryBuilder.FilterFunctionBuilder(
|
||||
QueryBuilders.termQuery("tier.tagFQN", "Tier.Tier2"),
|
||||
ScoreFunctionBuilders.weightFactorFunction(3.0f));
|
||||
ScoreFunctionBuilders.weightFactorFunction(30.0f));
|
||||
|
||||
FunctionScoreQueryBuilder.FilterFunctionBuilder tier3Boost =
|
||||
new FunctionScoreQueryBuilder.FilterFunctionBuilder(
|
||||
QueryBuilders.termQuery("tier.tagFQN", "Tier.Tier3"),
|
||||
ScoreFunctionBuilders.weightFactorFunction(1.0f));
|
||||
ScoreFunctionBuilders.weightFactorFunction(15.0f));
|
||||
|
||||
FunctionScoreQueryBuilder.FilterFunctionBuilder weeklyStatsBoost =
|
||||
new FunctionScoreQueryBuilder.FilterFunctionBuilder(
|
||||
QueryBuilders.rangeQuery("usageSummary.weeklyStats.count").gt(0),
|
||||
ScoreFunctionBuilders.fieldValueFactorFunction("usageSummary.weeklyStats.count")
|
||||
.factor(1.5f)
|
||||
.factor(4.0f)
|
||||
.modifier(FieldValueFactorFunction.Modifier.SQRT)
|
||||
.missing(1));
|
||||
|
||||
@ -1169,7 +1158,7 @@ public class ElasticSearchClient implements SearchClient {
|
||||
new FunctionScoreQueryBuilder.FilterFunctionBuilder(
|
||||
QueryBuilders.rangeQuery("totalVotes").gt(0),
|
||||
ScoreFunctionBuilders.fieldValueFactorFunction("totalVotes")
|
||||
.factor(2.0f)
|
||||
.factor(3.0f)
|
||||
.modifier(FieldValueFactorFunction.Modifier.LN1P)
|
||||
.missing(0));
|
||||
|
||||
@ -1177,16 +1166,10 @@ public class ElasticSearchClient implements SearchClient {
|
||||
return QueryBuilders.functionScoreQuery(
|
||||
queryBuilder,
|
||||
new FunctionScoreQueryBuilder.FilterFunctionBuilder[] {
|
||||
displayNameBoost,
|
||||
nameBoost,
|
||||
tier1Boost,
|
||||
tier2Boost,
|
||||
tier3Boost,
|
||||
weeklyStatsBoost,
|
||||
totalVotesBoost
|
||||
tier1Boost, tier2Boost, tier3Boost, weeklyStatsBoost, totalVotesBoost
|
||||
})
|
||||
.scoreMode(FunctionScoreQuery.ScoreMode.SUM)
|
||||
.boostMode(CombineFunction.SUM);
|
||||
.boostMode(CombineFunction.MULTIPLY);
|
||||
}
|
||||
|
||||
private static HighlightBuilder buildHighlights(List<String> fields) {
|
||||
@ -1249,7 +1232,7 @@ public class ElasticSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildPipelineSearchBuilder(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, PipelineIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(List.of("tasks.name", "tasks.description"));
|
||||
SearchSourceBuilder searchSourceBuilder = searchBuilder(queryBuilder, hb, from, size);
|
||||
searchSourceBuilder.aggregation(
|
||||
@ -1260,7 +1243,7 @@ public class ElasticSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildMlModelSearchBuilder(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, MlModelIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(List.of("mlFeatures.name", "mlFeatures.description"));
|
||||
SearchSourceBuilder searchSourceBuilder = searchBuilder(queryBuilder, hb, from, size);
|
||||
return addAggregation(searchSourceBuilder);
|
||||
@ -1269,7 +1252,7 @@ public class ElasticSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildTopicSearchBuilder(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, TopicIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(new ArrayList<>());
|
||||
SearchSourceBuilder searchSourceBuilder = searchBuilder(queryBuilder, hb, from, size);
|
||||
searchSourceBuilder
|
||||
@ -1283,7 +1266,7 @@ public class ElasticSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildDashboardSearchBuilder(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, DashboardIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(List.of("charts.name", "charts.description"));
|
||||
SearchSourceBuilder searchSourceBuilder = searchBuilder(queryBuilder, hb, from, size);
|
||||
searchSourceBuilder
|
||||
@ -1301,7 +1284,7 @@ public class ElasticSearchClient implements SearchClient {
|
||||
String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, SearchIndex.getAllFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
SearchSourceBuilder searchSourceBuilder = searchBuilder(queryBuilder, null, from, size);
|
||||
searchSourceBuilder.aggregation(
|
||||
AggregationBuilders.terms("database.name.keyword")
|
||||
@ -1318,7 +1301,7 @@ public class ElasticSearchClient implements SearchClient {
|
||||
String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, SearchIndex.getDefaultFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(new ArrayList<>());
|
||||
SearchSourceBuilder searchSourceBuilder = searchBuilder(queryBuilder, hb, from, size);
|
||||
return addAggregation(searchSourceBuilder);
|
||||
@ -1327,7 +1310,7 @@ public class ElasticSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildTableSearchBuilder(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, TableIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb =
|
||||
buildHighlights(List.of("columns.name", "columns.description", "columns.children.name"));
|
||||
SearchSourceBuilder searchSourceBuilder =
|
||||
@ -1355,7 +1338,7 @@ public class ElasticSearchClient implements SearchClient {
|
||||
String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, GlossaryTermIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(List.of("synonyms"));
|
||||
SearchSourceBuilder searchSourceBuilder =
|
||||
new SearchSourceBuilder().query(queryBuilder).highlighter(hb).from(from).size(size);
|
||||
@ -1370,7 +1353,7 @@ public class ElasticSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildTagSearchBuilder(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, TagIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(new ArrayList<>());
|
||||
SearchSourceBuilder searchSourceBuilder =
|
||||
new SearchSourceBuilder().query(queryBuilder).highlighter(hb).from(from).size(size);
|
||||
@ -1383,7 +1366,7 @@ public class ElasticSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildContainerSearchBuilder(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, ContainerIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb =
|
||||
buildHighlights(
|
||||
List.of(
|
||||
@ -1403,7 +1386,7 @@ public class ElasticSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildQuerySearchBuilder(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, QueryIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(new ArrayList<>());
|
||||
return searchBuilder(queryBuilder, hb, from, size);
|
||||
}
|
||||
@ -1418,7 +1401,7 @@ public class ElasticSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildStoredProcedureSearch(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, StoredProcedureIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
queryBuilder.boostMode(CombineFunction.SUM);
|
||||
HighlightBuilder hb = buildHighlights(new ArrayList<>());
|
||||
SearchSourceBuilder searchSourceBuilder =
|
||||
@ -1430,7 +1413,7 @@ public class ElasticSearchClient implements SearchClient {
|
||||
String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, DashboardDataModelIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(new ArrayList<>());
|
||||
SearchSourceBuilder searchSourceBuilder =
|
||||
new SearchSourceBuilder().query(queryBuilder).highlighter(hb).from(from).size(size);
|
||||
@ -1442,10 +1425,24 @@ public class ElasticSearchClient implements SearchClient {
|
||||
return addAggregation(searchSourceBuilder);
|
||||
}
|
||||
|
||||
private static SearchSourceBuilder buildApiEndpointSearch(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, APIEndpointIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(new ArrayList<>());
|
||||
SearchSourceBuilder searchSourceBuilder = searchBuilder(queryBuilder, hb, from, size);
|
||||
searchSourceBuilder
|
||||
.aggregation(
|
||||
AggregationBuilders.terms(API_RESPONSE_SCHEMA_FIELD)
|
||||
.field(API_RESPONSE_SCHEMA_FIELD_KEYWORD))
|
||||
.aggregation(AggregationBuilders.terms(SCHEMA_FIELD_NAMES).field(SCHEMA_FIELD_NAMES));
|
||||
return addAggregation(searchSourceBuilder);
|
||||
}
|
||||
|
||||
private static SearchSourceBuilder buildDomainsSearch(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, DomainIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(new ArrayList<>());
|
||||
return searchBuilder(queryBuilder, hb, from, size);
|
||||
}
|
||||
@ -1459,7 +1456,7 @@ public class ElasticSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildSearchEntitySearch(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, SearchEntityIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(new ArrayList<>());
|
||||
SearchSourceBuilder searchSourceBuilder =
|
||||
new SearchSourceBuilder().query(queryBuilder).highlighter(hb).from(from).size(size);
|
||||
@ -1486,7 +1483,7 @@ public class ElasticSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildDataProductSearch(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, DataProductIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
queryBuilder.boostMode(CombineFunction.SUM);
|
||||
HighlightBuilder hb = buildHighlights(new ArrayList<>());
|
||||
SearchSourceBuilder searchSourceBuilder =
|
||||
@ -2073,10 +2070,6 @@ public class ElasticSearchClient implements SearchClient {
|
||||
.calendarInterval(DateHistogramInterval.DAY);
|
||||
|
||||
TermsAggregationBuilder termsAggregationBuilder;
|
||||
SumAggregationBuilder sumAggregationBuilder;
|
||||
SumAggregationBuilder sumEntityCountAggregationBuilder =
|
||||
AggregationBuilders.sum(DataInsightChartRepository.ENTITY_COUNT)
|
||||
.field(DataInsightChartRepository.DATA_ENTITY_COUNT);
|
||||
|
||||
switch (dataInsightChartName) {
|
||||
case AGGREGATED_UNUSED_ASSETS_SIZE, AGGREGATED_UNUSED_ASSETS_COUNT:
|
||||
@ -2277,7 +2270,9 @@ public class ElasticSearchClient implements SearchClient {
|
||||
case "data_product_search_index" -> buildDataProductSearch(q, from, size);
|
||||
case "test_case_resolution_status_search_index" -> buildTestCaseResolutionStatusSearch(
|
||||
q, from, size);
|
||||
case "mlmodel_service_search_index",
|
||||
case "api_endpoint_search_index", "apiEndpoint" -> buildApiEndpointSearch(q, from, size);
|
||||
case "api_service_search_index",
|
||||
"mlmodel_service_search_index",
|
||||
"database_service_search_index",
|
||||
"messaging_service_index",
|
||||
"dashboard_service_index",
|
||||
|
||||
@ -57,9 +57,6 @@ public record ContainerIndex(Container container) implements ColumnIndex {
|
||||
|
||||
Map<String, Object> commonAttributes = getCommonAttributesMap(container, Entity.CONTAINER);
|
||||
doc.putAll(commonAttributes);
|
||||
doc.put(
|
||||
"displayName",
|
||||
container.getDisplayName() != null ? container.getDisplayName() : container.getName());
|
||||
doc.put("tags", flattenedTagList);
|
||||
doc.put("tier", parseTags.getTierTag());
|
||||
doc.put("service_suggest", serviceSuggest);
|
||||
|
||||
@ -48,10 +48,6 @@ public class DashboardIndex implements SearchIndex {
|
||||
}
|
||||
Map<String, Object> commonAttributes = getCommonAttributesMap(dashboard, Entity.DASHBOARD);
|
||||
doc.putAll(commonAttributes);
|
||||
|
||||
doc.put(
|
||||
"displayName",
|
||||
dashboard.getDisplayName() != null ? dashboard.getDisplayName() : dashboard.getName());
|
||||
doc.put("tags", parseTags.getTags());
|
||||
doc.put("tier", parseTags.getTierTag());
|
||||
doc.put("chart_suggest", chartSuggest);
|
||||
|
||||
@ -60,11 +60,6 @@ public class IngestionPipelineIndex implements SearchIndex {
|
||||
ingestionPipeline.getName() != null
|
||||
? ingestionPipeline.getName()
|
||||
: ingestionPipeline.getDisplayName());
|
||||
doc.put(
|
||||
"displayName",
|
||||
ingestionPipeline.getDisplayName() != null
|
||||
? ingestionPipeline.getDisplayName()
|
||||
: ingestionPipeline.getName());
|
||||
doc.put("tags", parseTags.getTags());
|
||||
doc.put("tier", parseTags.getTierTag());
|
||||
doc.put("service_suggest", serviceSuggest);
|
||||
|
||||
@ -32,9 +32,6 @@ public class MlModelIndex implements SearchIndex {
|
||||
ParseTags parseTags = new ParseTags(Entity.getEntityTags(Entity.MLMODEL, mlModel));
|
||||
Map<String, Object> commonAttributes = getCommonAttributesMap(mlModel, Entity.MLMODEL);
|
||||
doc.putAll(commonAttributes);
|
||||
doc.put(
|
||||
"displayName",
|
||||
mlModel.getDisplayName() != null ? mlModel.getDisplayName() : mlModel.getName());
|
||||
doc.put("tags", parseTags.getTags());
|
||||
doc.put("tier", parseTags.getTierTag());
|
||||
doc.put("serviceType", mlModel.getServiceType());
|
||||
|
||||
@ -46,9 +46,6 @@ public class PipelineIndex implements SearchIndex {
|
||||
Map<String, Object> commonAttributes = getCommonAttributesMap(pipeline, Entity.PIPELINE);
|
||||
doc.putAll(commonAttributes);
|
||||
doc.put("name", pipeline.getName() != null ? pipeline.getName() : pipeline.getDisplayName());
|
||||
doc.put(
|
||||
"displayName",
|
||||
pipeline.getDisplayName() != null ? pipeline.getDisplayName() : pipeline.getName());
|
||||
doc.put("tags", parseTags.getTags());
|
||||
doc.put("tier", parseTags.getTierTag());
|
||||
doc.put("task_suggest", taskSuggest);
|
||||
|
||||
@ -36,7 +36,6 @@ public class QueryIndex implements SearchIndex {
|
||||
ParseTags parseTags = new ParseTags(Entity.getEntityTags(Entity.QUERY, query));
|
||||
Map<String, Object> commonAttributes = getCommonAttributesMap(query, Entity.QUERY);
|
||||
doc.putAll(commonAttributes);
|
||||
doc.put("displayName", query.getDisplayName() != null ? query.getDisplayName() : "");
|
||||
doc.put("tags", parseTags.getTags());
|
||||
doc.put("tier", parseTags.getTierTag());
|
||||
return doc;
|
||||
|
||||
@ -3,14 +3,11 @@ package org.openmetadata.service.search.indexes;
|
||||
import static org.openmetadata.common.utils.CommonUtil.nullOrEmpty;
|
||||
import static org.openmetadata.service.Entity.FIELD_DESCRIPTION;
|
||||
import static org.openmetadata.service.Entity.FIELD_DISPLAY_NAME;
|
||||
import static org.openmetadata.service.Entity.FIELD_NAME;
|
||||
import static org.openmetadata.service.jdbi3.LineageRepository.buildRelationshipDetailsMap;
|
||||
import static org.openmetadata.service.search.EntityBuilderConstant.DISPLAY_NAME_KEYWORD;
|
||||
import static org.openmetadata.service.search.EntityBuilderConstant.FIELD_DISPLAY_NAME_NGRAM;
|
||||
import static org.openmetadata.service.search.EntityBuilderConstant.FIELD_NAME_NGRAM;
|
||||
import static org.openmetadata.service.search.EntityBuilderConstant.FULLY_QUALIFIED_NAME;
|
||||
import static org.openmetadata.service.search.EntityBuilderConstant.FULLY_QUALIFIED_NAME_PARTS;
|
||||
import static org.openmetadata.service.search.EntityBuilderConstant.NAME_KEYWORD;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@ -68,6 +65,9 @@ public interface SearchIndex {
|
||||
default Map<String, Object> getCommonAttributesMap(EntityInterface entity, String entityType) {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
List<SearchSuggest> suggest = getSuggest();
|
||||
map.put(
|
||||
"displayName",
|
||||
entity.getDisplayName() != null ? entity.getDisplayName() : entity.getName());
|
||||
map.put("entityType", entityType);
|
||||
map.put("owners", getEntitiesWithDisplayName(entity.getOwners()));
|
||||
map.put("domain", getEntityWithDisplayName(entity.getDomain()));
|
||||
@ -163,12 +163,9 @@ public interface SearchIndex {
|
||||
|
||||
static Map<String, Float> getDefaultFields() {
|
||||
Map<String, Float> fields = new HashMap<>();
|
||||
fields.put(FIELD_DISPLAY_NAME, 10.0f);
|
||||
fields.put(DISPLAY_NAME_KEYWORD, 10.0f);
|
||||
fields.put(FIELD_DISPLAY_NAME_NGRAM, 1.0f);
|
||||
fields.put(FIELD_NAME, 10.0f);
|
||||
fields.put(FIELD_NAME_NGRAM, 1.0f);
|
||||
fields.put(DISPLAY_NAME_KEYWORD, 8.0f);
|
||||
fields.put(NAME_KEYWORD, 8.0f);
|
||||
fields.put(FIELD_DISPLAY_NAME, 10.0f);
|
||||
fields.put(FIELD_DESCRIPTION, 2.0f);
|
||||
fields.put(FULLY_QUALIFIED_NAME, 5.0f);
|
||||
fields.put(FULLY_QUALIFIED_NAME_PARTS, 5.0f);
|
||||
@ -178,6 +175,7 @@ public interface SearchIndex {
|
||||
static Map<String, Float> getAllFields() {
|
||||
Map<String, Float> fields = getDefaultFields();
|
||||
fields.putAll(TableIndex.getFields());
|
||||
fields.putAll(StoredProcedureIndex.getFields());
|
||||
fields.putAll(DashboardIndex.getFields());
|
||||
fields.putAll(DashboardDataModelIndex.getFields());
|
||||
fields.putAll(PipelineIndex.getFields());
|
||||
|
||||
@ -91,8 +91,6 @@ public record TableIndex(Table table) implements ColumnIndex {
|
||||
.collect(ArrayList::new, ArrayList::add, ArrayList::addAll);
|
||||
Map<String, Object> commonAttributes = getCommonAttributesMap(table, Entity.TABLE);
|
||||
doc.putAll(commonAttributes);
|
||||
doc.put(
|
||||
"displayName", table.getDisplayName() != null ? table.getDisplayName() : table.getName());
|
||||
doc.put("tags", flattenedTagList);
|
||||
doc.put("tier", parseTags.getTierTag());
|
||||
doc.put("service_suggest", serviceSuggest);
|
||||
@ -113,7 +111,7 @@ public record TableIndex(Table table) implements ColumnIndex {
|
||||
fields.put("columns.name", 5.0f);
|
||||
fields.put("columns.displayName", 5.0f);
|
||||
fields.put("columns.description", 2.0f);
|
||||
fields.put("columns.children.name", 5.0f);
|
||||
fields.put("columns.children.name", 3.0f);
|
||||
return fields;
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,7 +4,6 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import org.openmetadata.common.utils.CommonUtil;
|
||||
import org.openmetadata.schema.entity.teams.Team;
|
||||
import org.openmetadata.service.Entity;
|
||||
import org.openmetadata.service.search.models.SearchSuggest;
|
||||
@ -39,9 +38,6 @@ public class TeamIndex implements SearchIndex {
|
||||
Map<String, Object> commonAttributes = getCommonAttributesMap(team, Entity.TEAM);
|
||||
doc.putAll(commonAttributes);
|
||||
doc.put("isBot", false);
|
||||
doc.put(
|
||||
"displayName",
|
||||
CommonUtil.nullOrEmpty(team.getDisplayName()) ? team.getName() : team.getDisplayName());
|
||||
return doc;
|
||||
}
|
||||
}
|
||||
|
||||
@ -76,8 +76,6 @@ public class TopicIndex implements SearchIndex {
|
||||
.collect(ArrayList::new, ArrayList::add, ArrayList::addAll);
|
||||
Map<String, Object> commonAttributes = getCommonAttributesMap(topic, Entity.TOPIC);
|
||||
doc.putAll(commonAttributes);
|
||||
doc.put(
|
||||
"displayName", topic.getDisplayName() != null ? topic.getDisplayName() : topic.getName());
|
||||
doc.put("tags", flattenedTagList);
|
||||
doc.put("tier", parseTags.getTierTag());
|
||||
doc.put("field_suggest", fieldSuggest);
|
||||
|
||||
@ -4,7 +4,6 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import org.openmetadata.common.utils.CommonUtil;
|
||||
import org.openmetadata.schema.entity.teams.User;
|
||||
import org.openmetadata.service.Entity;
|
||||
import org.openmetadata.service.search.models.SearchSuggest;
|
||||
@ -38,9 +37,6 @@ public class UserIndex implements SearchIndex {
|
||||
public Map<String, Object> buildSearchIndexDocInternal(Map<String, Object> doc) {
|
||||
Map<String, Object> commonAttributes = getCommonAttributesMap(user, Entity.USER);
|
||||
doc.putAll(commonAttributes);
|
||||
doc.put(
|
||||
"displayName",
|
||||
CommonUtil.nullOrEmpty(user.getDisplayName()) ? user.getName() : user.getDisplayName());
|
||||
if (user.getIsBot() == null) {
|
||||
doc.put("isBot", false);
|
||||
}
|
||||
|
||||
@ -8,11 +8,12 @@ import static org.openmetadata.service.Entity.DATA_PRODUCT;
|
||||
import static org.openmetadata.service.Entity.DOMAIN;
|
||||
import static org.openmetadata.service.Entity.FIELD_DESCRIPTION;
|
||||
import static org.openmetadata.service.Entity.FIELD_DISPLAY_NAME;
|
||||
import static org.openmetadata.service.Entity.FIELD_NAME;
|
||||
import static org.openmetadata.service.Entity.GLOSSARY_TERM;
|
||||
import static org.openmetadata.service.Entity.QUERY;
|
||||
import static org.openmetadata.service.Entity.RAW_COST_ANALYSIS_REPORT_DATA;
|
||||
import static org.openmetadata.service.exception.CatalogGenericExceptionMapper.getResponse;
|
||||
import static org.openmetadata.service.search.EntityBuilderConstant.API_RESPONSE_SCHEMA_FIELD;
|
||||
import static org.openmetadata.service.search.EntityBuilderConstant.API_RESPONSE_SCHEMA_FIELD_KEYWORD;
|
||||
import static org.openmetadata.service.search.EntityBuilderConstant.COLUMNS_NAME_KEYWORD;
|
||||
import static org.openmetadata.service.search.EntityBuilderConstant.DATA_MODEL_COLUMNS_NAME_KEYWORD;
|
||||
import static org.openmetadata.service.search.EntityBuilderConstant.DOMAIN_DISPLAY_NAME_KEYWORD;
|
||||
@ -20,7 +21,6 @@ import static org.openmetadata.service.search.EntityBuilderConstant.ES_MESSAGE_S
|
||||
import static org.openmetadata.service.search.EntityBuilderConstant.ES_TAG_FQN_FIELD;
|
||||
import static org.openmetadata.service.search.EntityBuilderConstant.FIELD_COLUMN_NAMES;
|
||||
import static org.openmetadata.service.search.EntityBuilderConstant.FIELD_DISPLAY_NAME_NGRAM;
|
||||
import static org.openmetadata.service.search.EntityBuilderConstant.FIELD_NAME_NGRAM;
|
||||
import static org.openmetadata.service.search.EntityBuilderConstant.MAX_AGGREGATE_SIZE;
|
||||
import static org.openmetadata.service.search.EntityBuilderConstant.MAX_RESULT_HITS;
|
||||
import static org.openmetadata.service.search.EntityBuilderConstant.OWNER_DISPLAY_NAME_KEYWORD;
|
||||
@ -81,6 +81,7 @@ import org.openmetadata.service.search.SearchClient;
|
||||
import org.openmetadata.service.search.SearchIndexUtils;
|
||||
import org.openmetadata.service.search.SearchRequest;
|
||||
import org.openmetadata.service.search.SearchSortFilter;
|
||||
import org.openmetadata.service.search.indexes.APIEndpointIndex;
|
||||
import org.openmetadata.service.search.indexes.ContainerIndex;
|
||||
import org.openmetadata.service.search.indexes.DashboardDataModelIndex;
|
||||
import org.openmetadata.service.search.indexes.DashboardIndex;
|
||||
@ -521,6 +522,9 @@ public class OpenSearchClient implements SearchClient {
|
||||
}
|
||||
|
||||
searchSourceBuilder.timeout(new TimeValue(30, TimeUnit.SECONDS));
|
||||
if (request.isExplain()) {
|
||||
searchSourceBuilder.explain(true);
|
||||
}
|
||||
try {
|
||||
SearchResponse searchResponse =
|
||||
client.search(
|
||||
@ -928,43 +932,27 @@ public class OpenSearchClient implements SearchClient {
|
||||
return responseMap;
|
||||
}
|
||||
|
||||
private static FunctionScoreQueryBuilder boostScore(
|
||||
QueryStringQueryBuilder queryBuilder, String query) {
|
||||
|
||||
FunctionScoreQueryBuilder.FilterFunctionBuilder exactMatchBoost =
|
||||
new FunctionScoreQueryBuilder.FilterFunctionBuilder(
|
||||
QueryBuilders.termQuery("displayName.keyword", query),
|
||||
ScoreFunctionBuilders.weightFactorFunction(10));
|
||||
|
||||
FunctionScoreQueryBuilder.FilterFunctionBuilder nameBoost =
|
||||
new FunctionScoreQueryBuilder.FilterFunctionBuilder(
|
||||
QueryBuilders.boolQuery()
|
||||
.mustNot(
|
||||
QueryBuilders.existsQuery(
|
||||
"displayName.keyword")) // Only use name if displayName doesn't exist
|
||||
.must(QueryBuilders.matchQuery("name.keyword", query)),
|
||||
ScoreFunctionBuilders.weightFactorFunction(8.0f));
|
||||
|
||||
private static FunctionScoreQueryBuilder boostScore(QueryStringQueryBuilder queryBuilder) {
|
||||
FunctionScoreQueryBuilder.FilterFunctionBuilder tier1Boost =
|
||||
new FunctionScoreQueryBuilder.FilterFunctionBuilder(
|
||||
QueryBuilders.termQuery("tier.tagFQN", "Tier1"),
|
||||
ScoreFunctionBuilders.weightFactorFunction(5.0f));
|
||||
ScoreFunctionBuilders.weightFactorFunction(50.0f));
|
||||
|
||||
FunctionScoreQueryBuilder.FilterFunctionBuilder tier2Boost =
|
||||
new FunctionScoreQueryBuilder.FilterFunctionBuilder(
|
||||
QueryBuilders.termQuery("tier.tagFQN", "Tier2"),
|
||||
ScoreFunctionBuilders.weightFactorFunction(3.0f));
|
||||
ScoreFunctionBuilders.weightFactorFunction(30.0f));
|
||||
|
||||
FunctionScoreQueryBuilder.FilterFunctionBuilder tier3Boost =
|
||||
new FunctionScoreQueryBuilder.FilterFunctionBuilder(
|
||||
QueryBuilders.termQuery("tier.tagFQN", "Tier3"),
|
||||
ScoreFunctionBuilders.weightFactorFunction(1.0f));
|
||||
ScoreFunctionBuilders.weightFactorFunction(15.0f));
|
||||
|
||||
FunctionScoreQueryBuilder.FilterFunctionBuilder weeklyStatsBoost =
|
||||
new FunctionScoreQueryBuilder.FilterFunctionBuilder(
|
||||
QueryBuilders.rangeQuery("usageSummary.weeklyStats.count").gt(0),
|
||||
ScoreFunctionBuilders.fieldValueFactorFunction("usageSummary.weeklyStats.count")
|
||||
.factor(1.5f)
|
||||
.factor(4.0f)
|
||||
.modifier(FieldValueFactorFunction.Modifier.SQRT)
|
||||
.missing(1));
|
||||
|
||||
@ -972,7 +960,7 @@ public class OpenSearchClient implements SearchClient {
|
||||
new FunctionScoreQueryBuilder.FilterFunctionBuilder(
|
||||
QueryBuilders.rangeQuery("totalVotes").gt(0),
|
||||
ScoreFunctionBuilders.fieldValueFactorFunction("totalVotes")
|
||||
.factor(2.0f)
|
||||
.factor(3.0f)
|
||||
.modifier(FieldValueFactorFunction.Modifier.LN1P)
|
||||
.missing(0));
|
||||
|
||||
@ -980,26 +968,15 @@ public class OpenSearchClient implements SearchClient {
|
||||
return QueryBuilders.functionScoreQuery(
|
||||
queryBuilder,
|
||||
new FunctionScoreQueryBuilder.FilterFunctionBuilder[] {
|
||||
nameBoost,
|
||||
exactMatchBoost,
|
||||
tier1Boost,
|
||||
tier2Boost,
|
||||
tier3Boost,
|
||||
weeklyStatsBoost,
|
||||
totalVotesBoost
|
||||
tier1Boost, tier2Boost, tier3Boost, weeklyStatsBoost, totalVotesBoost
|
||||
})
|
||||
.scoreMode(FunctionScoreQuery.ScoreMode.SUM)
|
||||
.boostMode(CombineFunction.SUM);
|
||||
.boostMode(CombineFunction.MULTIPLY);
|
||||
}
|
||||
|
||||
private static HighlightBuilder buildHighlights(List<String> fields) {
|
||||
List<String> defaultFields =
|
||||
List.of(
|
||||
FIELD_DISPLAY_NAME,
|
||||
FIELD_NAME,
|
||||
FIELD_DESCRIPTION,
|
||||
FIELD_DISPLAY_NAME_NGRAM,
|
||||
FIELD_NAME_NGRAM);
|
||||
List.of(FIELD_DISPLAY_NAME, FIELD_DESCRIPTION, FIELD_DISPLAY_NAME_NGRAM);
|
||||
defaultFields = Stream.concat(defaultFields.stream(), fields.stream()).toList();
|
||||
HighlightBuilder hb = new HighlightBuilder();
|
||||
for (String field : defaultFields) {
|
||||
@ -1236,7 +1213,7 @@ public class OpenSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildPipelineSearchBuilder(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, PipelineIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(List.of("tasks.name", "tasks.description"));
|
||||
SearchSourceBuilder searchSourceBuilder = searchBuilder(queryBuilder, hb, from, size);
|
||||
searchSourceBuilder.aggregation(
|
||||
@ -1247,7 +1224,7 @@ public class OpenSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildMlModelSearchBuilder(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, MlModelIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(List.of("mlFeatures.name", "mlFeatures.description"));
|
||||
SearchSourceBuilder searchSourceBuilder = searchBuilder(queryBuilder, hb, from, size);
|
||||
return addAggregation(searchSourceBuilder);
|
||||
@ -1256,7 +1233,7 @@ public class OpenSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildTopicSearchBuilder(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, TopicIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb =
|
||||
buildHighlights(
|
||||
List.of(
|
||||
@ -1274,7 +1251,7 @@ public class OpenSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildDashboardSearchBuilder(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, DashboardIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(List.of("charts.name", "charts.description"));
|
||||
SearchSourceBuilder searchSourceBuilder = searchBuilder(queryBuilder, hb, from, size);
|
||||
searchSourceBuilder
|
||||
@ -1292,7 +1269,7 @@ public class OpenSearchClient implements SearchClient {
|
||||
String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, SearchIndex.getAllFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
queryBuilder.boostMode(CombineFunction.SUM);
|
||||
SearchSourceBuilder searchSourceBuilder = searchBuilder(queryBuilder, null, from, size);
|
||||
searchSourceBuilder.aggregation(
|
||||
@ -1310,7 +1287,7 @@ public class OpenSearchClient implements SearchClient {
|
||||
String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, SearchIndex.getDefaultFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(new ArrayList<>());
|
||||
SearchSourceBuilder searchSourceBuilder = searchBuilder(queryBuilder, hb, from, size);
|
||||
return addAggregation(searchSourceBuilder);
|
||||
@ -1319,10 +1296,10 @@ public class OpenSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildTableSearchBuilder(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, TableIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb =
|
||||
buildHighlights(List.of("columns.name", "columns.description", "columns.children.name"));
|
||||
queryBuilder.boostMode(CombineFunction.SUM);
|
||||
SearchSourceBuilder searchSourceBuilder =
|
||||
new SearchSourceBuilder().query(queryBuilder).highlighter(hb).from(from).size(size);
|
||||
searchSourceBuilder.aggregation(
|
||||
@ -1351,7 +1328,7 @@ public class OpenSearchClient implements SearchClient {
|
||||
String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, GlossaryTermIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(List.of("synonyms"));
|
||||
SearchSourceBuilder searchSourceBuilder =
|
||||
new SearchSourceBuilder().query(queryBuilder).highlighter(hb).from(from).size(size);
|
||||
@ -1366,7 +1343,7 @@ public class OpenSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildTagSearchBuilder(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, TagIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(new ArrayList<>());
|
||||
SearchSourceBuilder searchSourceBuilder =
|
||||
new SearchSourceBuilder().query(queryBuilder).highlighter(hb).from(from).size(size);
|
||||
@ -1379,7 +1356,7 @@ public class OpenSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildContainerSearchBuilder(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, ContainerIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb =
|
||||
buildHighlights(
|
||||
List.of(
|
||||
@ -1399,7 +1376,7 @@ public class OpenSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildQuerySearchBuilder(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, QueryIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(new ArrayList<>());
|
||||
return searchBuilder(queryBuilder, hb, from, size);
|
||||
}
|
||||
@ -1407,7 +1384,7 @@ public class OpenSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildTestCaseSearch(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, TestCaseIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(List.of("testSuite.name", "testSuite.description"));
|
||||
return searchBuilder(queryBuilder, hb, from, size);
|
||||
}
|
||||
@ -1415,7 +1392,7 @@ public class OpenSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildStoredProcedureSearch(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, StoredProcedureIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(new ArrayList<>());
|
||||
SearchSourceBuilder searchSourceBuilder =
|
||||
new SearchSourceBuilder().query(queryBuilder).highlighter(hb).from(from).size(size);
|
||||
@ -1426,7 +1403,7 @@ public class OpenSearchClient implements SearchClient {
|
||||
String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, DashboardDataModelIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(new ArrayList<>());
|
||||
SearchSourceBuilder searchSourceBuilder =
|
||||
new SearchSourceBuilder().query(queryBuilder).highlighter(hb).from(from).size(size);
|
||||
@ -1447,7 +1424,7 @@ public class OpenSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildDomainsSearch(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, DomainIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(new ArrayList<>());
|
||||
return searchBuilder(queryBuilder, hb, from, size);
|
||||
}
|
||||
@ -1455,7 +1432,7 @@ public class OpenSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildSearchEntitySearch(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, SearchEntityIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(new ArrayList<>());
|
||||
SearchSourceBuilder searchSourceBuilder =
|
||||
new SearchSourceBuilder().query(queryBuilder).highlighter(hb).from(from).size(size);
|
||||
@ -1468,11 +1445,12 @@ public class OpenSearchClient implements SearchClient {
|
||||
String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, TestCaseResolutionStatusIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(new ArrayList<>());
|
||||
return searchBuilder(queryBuilder, hb, from, size);
|
||||
}
|
||||
|
||||
|
||||
private static QueryStringQueryBuilder buildSearchQueryBuilder(
|
||||
String query, Map<String, Float> fields) {
|
||||
return QueryBuilders.queryStringQuery(query)
|
||||
@ -1484,6 +1462,20 @@ public class OpenSearchClient implements SearchClient {
|
||||
.tieBreaker(0.5f);
|
||||
}
|
||||
|
||||
private static SearchSourceBuilder buildApiEndpointSearch(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, APIEndpointIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(new ArrayList<>());
|
||||
SearchSourceBuilder searchSourceBuilder = searchBuilder(queryBuilder, hb, from, size);
|
||||
searchSourceBuilder
|
||||
.aggregation(
|
||||
AggregationBuilders.terms(API_RESPONSE_SCHEMA_FIELD)
|
||||
.field(API_RESPONSE_SCHEMA_FIELD_KEYWORD))
|
||||
.aggregation(AggregationBuilders.terms(SCHEMA_FIELD_NAMES).field(SCHEMA_FIELD_NAMES));
|
||||
return addAggregation(searchSourceBuilder);
|
||||
}
|
||||
|
||||
private static SearchSourceBuilder buildAggregateSearchBuilder(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryBuilder =
|
||||
QueryBuilders.queryStringQuery(query)
|
||||
@ -1529,7 +1521,7 @@ public class OpenSearchClient implements SearchClient {
|
||||
private static SearchSourceBuilder buildDataProductSearch(String query, int from, int size) {
|
||||
QueryStringQueryBuilder queryStringBuilder =
|
||||
buildSearchQueryBuilder(query, DataProductIndex.getFields());
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder, query);
|
||||
FunctionScoreQueryBuilder queryBuilder = boostScore(queryStringBuilder);
|
||||
HighlightBuilder hb = buildHighlights(new ArrayList<>());
|
||||
SearchSourceBuilder searchSourceBuilder =
|
||||
new SearchSourceBuilder().query(queryBuilder).highlighter(hb).from(from).size(size);
|
||||
@ -2255,7 +2247,9 @@ public class OpenSearchClient implements SearchClient {
|
||||
case "data_product_search_index" -> buildDataProductSearch(q, from, size);
|
||||
case "test_case_resolution_status_search_index" -> buildTestCaseResolutionStatusSearch(
|
||||
q, from, size);
|
||||
case "mlmodel_service_search_index",
|
||||
case "api_endpoint_search_index", "apiEndpoint" -> buildApiEndpointSearch(q, from, size);
|
||||
case "api_service_search_index",
|
||||
"mlmodel_service_search_index",
|
||||
"database_service_search_index",
|
||||
"messaging_service_index",
|
||||
"dashboard_service_index",
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,37 +1,50 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
"char_filter": [],
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
}
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"om_stemmer"
|
||||
]
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
"char_filter": [],
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
}
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
"mappings": {
|
||||
"properties": {
|
||||
"id": {
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"tokenizer": {
|
||||
"edge_ngram_tokenizer": {
|
||||
"type": "edge_ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 20,
|
||||
"token_chars": ["letter", "digit"]
|
||||
}
|
||||
},
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
@ -12,25 +20,27 @@
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"word_delimiter_filter",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
"type": "custom",
|
||||
"tokenizer": "edge_ngram_tokenizer",
|
||||
"filter": ["lowercase"]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
"name": "kstem"
|
||||
},
|
||||
"word_delimiter_filter": {
|
||||
"type": "word_delimiter",
|
||||
"preserve_original": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user