Я пытаюсь создать модуль запроса, используя метод инициализации объекта, который будет динамически строить запрос ES на основе критериев поиска, используя ElasticSearch. Net и Nest for. Net (версия x6.4) .
То, что я сейчас делаю, - это создание строительных блоков с использованием следующих функций:
public TermQuery AddTermQuery(string fieldName, string fieldValue)
{
return new TermQuery { Field = fieldName, Value = fieldValue };
}
public MultiMatchQuery AddMultiMatchQuery(string searchKeyword)
{
return new MultiMatchQuery
{
Query = searchKeyword,
Type = TextQueryType.MostFields,
Analyzer = "standard"
};
}
public BoolQuery AddBoolQuery(\)
{
return new BoolQuery
{
Must = new QueryContainer[] { },
MustNot = new QueryContainer[] { },
Should = new QueryContainer[] { }
};
}
public QueryContainer[] AddMustQuery()
{
return new QueryContainer[] { };
}
public NumericRangeQuery AddNumericRangeQuery(string fieldName, int greaterThanEqualTo, int lessThanEqualTo, int greaterThan = 0, int lessThan = 0)
{
if (greaterThan == 0 || lessThan == 0)
return new NumericRangeQuery { Field = fieldName, GreaterThanOrEqualTo = greaterThanEqualTo, LessThanOrEqualTo = lessThanEqualTo };
else
return new NumericRangeQuery { Field = fieldName, GreaterThan = greaterThan, LessThan = lessThan };
}
Если я хочу собрать нижеупомянутый запрос, используя вышеуказанные функции:
var query = new SearchRequest
{
Query = new BoolQuery
{
Must = new QueryContainer[]
{
new MultiMatchQuery
{
Query = "Political Relations: Soviet Union",
Analyzer = "standard",
Type = TextQueryType.MostFields
}
},
Filter = new QueryContainer[]
{
new BoolQuery
{
Must = new QueryContainer[] { new TermQuery { Field = "documentLevel", Value = 1 } },
MustNot = new QueryContainer[] { new TermQuery { Field = "moduleNumber", Value = 4 } },
Should = new QueryContainer[]
{
new BoolQuery
{
Must =new QueryContainer[]
{
new TermQuery { Field = "coverDateStartSpecified", Value = true},
new TermQuery { Field = "coverDateEndSpecified", Value = true },
new BoolQuery
{
Should = new QueryContainer[]
{
new NumericRangeQuery { Field = "coverDateStartYear", GreaterThanOrEqualTo = 1946, LessThanOrEqualTo = 1975},
new NumericRangeQuery { Field = "coverDateEndYear", GreaterThanOrEqualTo = 1946, LessThanOrEqualTo = 1975}
}
}
},
},
new BoolQuery
{
Must =new QueryContainer[]
{ new NumericRangeQuery { Field = "coverDateYear", GreaterThanOrEqualTo = 1946, LessThanOrEqualTo = 1975},
new BoolQuery
{
Should = new QueryContainer[]
{
new TermQuery { Field = "coverDateStartSpecified", Value = false},
new TermQuery { Field = "coverDateEndSpecified", Value = false }
}
}
},
}
}
}
}
}
};
Но я застрял в части запроса сборки с вышеупомянутыми функциями.
public void DocumentQueryEs(DocumentLevel documentLevel, string doi)
{
var searchQuery = new SearchRequest
{
};
}
Как я могу go узнать об этом для части сборки? Пожалуйста, помогите, если я иду в правильном направлении или нет, или я делаю что-то не так в этом.
Заранее спасибо !!!