1. consultas complexas
consulta Composite é reunir os requisitos de consulta algumas consultas simples mais complexas, além de consultas complexas também pode controlar o comportamento de outra consulta.
1.1 constant_score
consulta constant_score podem ser outros tipos de embalagem de uma consulta e retorno às condições de consulta que correspondem ao filtro com a mesma pontuação no documento. Quando não estamos preocupados com o impacto sobre a freqüência de termos de pesquisa classificou os resultados de pesquisa, você pode usar constant_score o filtro de consulta consulta ou filtro declarações embalados.
Exemplos são como se segue:
{
"inquerir":{
"Constant_score": {
"filtro":{
"prazo":{
"City": "Beijing"
}
}
}
}
}
exemplos Java são como se segue:
MatchQueryBuilder consulta = QueryBuilders.matchQuery ( "título", "新闻") .minimumShouldMatch ( "90%");
QueryBuilders.constantScoreQuery (query) .boost (3.0f);
consulta 1,2 boleano
consulta bool pode ser qualquer número de consultas simples em conjunto, o uso deve, deve, must_not, opções de filtro representam conexões lógicas entre consultas simples, cada opção pode aparecer em qualquer lugar de zero a muitas vezes os seus significados são:
deve: documento deve corresponder a consulta no bloco fase opção deve nos operadores lógicos AND.
deve: documento coincide com a condição de consulta Se a opção não pode coincidir com a fase do bloco para uma operação OR lógica.
must_not: Pelo contrário, o documento que correspondam as condições de consulta da opção não serão devolvidos e obrigação.
Filtro: o mesmo e deve coincidir com as condições da consulta no documento opções de filtro será devolvido, mas o filtro não marcar, basta jogar filtragem.
Exemplos são como se segue:
{
"inquerir":{
"Bool": {
"devo":[
{
"Combine":{
"Title": "Bicicleta Sharing"
}
},
{
"prazo":{
"Distrito": "Changping District"
}
}
],
"devemos":[
{
"Combine":{
"Endereço": "Chaoyang District"
}
}
]
}
}
}
1.3 consulta dis_max
dis_max consulta ter algum contato com consulta bool também têm algumas diferenças, apoio consulta dis_max várias consultas simultâneas pode retornar qualquer tipo de documento e consulta de correspondência cláusula. Bool consulta pode ser diferente com todas as pontuações correspondem à consulta de uma combinação de, consulta dis_max usando apenas a melhor pontuação da consulta.
{
"inquerir":{
"Dis_max": {
"Tie_breaker": 0,7,
"Impulso": 1,2,
"consultas": [
{
"Match": { "endereço": "Beijing Chaoyang District"}
},
{
"Combine":{
"Title": "Beijing Chaoyang District."
}
}
]
}
}
}
consulta 1,4 function_score
consulta function_score pode modificar a pontuação consulta de documentos, a consulta é muito útil em alguns casos, tais como o documento é calculado pela função de pontuação marcar custos mais elevados, você pode usar filtros mais personalizado forma função de pontuação para substituir o método de pontuação tradicional.
Use consulta function_score, o usuário precisa definir uma consulta e uma função de pontuação função de pontuação múltipla irá consultar para calcular a pontuação de cada documento separadamente.
{
"inquerir": {
"Function_score": {
"inquerir": {
"Function_score": {
"inquerir": {
"Combine": {
"Title": "java 编程"
}
},
"funções": [
{
"Field_value_factor": {
"Campo": "preço",
"Factor": 0,1,
"Modificador": "ln1p"
}
}
],
"Score_mode": "multiplicar",
"Max_boost": 10,
"Boost": 1
}
},
"funções": [],
"Score_mode": "multiplicar",
"Boost_mode": "sum",
"Max_boost": 10,
"Boost": 1
}
}
}
exemplos Java são como se segue:
MatchPhraseQueryBuilder titleQuery = QueryBuilders.matchPhraseQuery ( "título", "Java 编程");
FieldValueFactorFunctionBuilder fator = ScoreFunctionBuilders.fieldValueFactorFunction ( "Preço") modificador (FieldValueFactorFunction.Modifier.LN1P) .factor (0.1f).;
FunctionScoreQueryBuilder.FilterFunctionBuilder [] = {filterFunctionBuilders
nova FunctionScoreQueryBuilder.FilterFunctionBuilder (fator)
};
FunctionScoreQueryBuilder functionScoreQuery = QueryBuilders.functionScoreQuery (titleQuery, filterFunctionBuilders);
FunctionScoreQueryBuilder consulta = QueryBuilders.functionScoreQuery (functionScoreQuery) .boostMode (CombineFunction.SUM);
1
2
3
4
5
6
7
função de pontuação detalhado
1.5 consulta impulsionar
aumentando a necessidade de dois cenários de consulta para ajustar consulta pontuação, aumentando a consulta diminuirá e empacotados juntos duas consultas um da pontuação consulta.
consulta impulsionar inclui positivo, negativo e negative_boost três partes, pontuação positiva consulta permaneceram inalterados, consultas negativos irão reduzir o marcador documento, indicam negative_boost pesos negativos na diminuição.
título Java consulta para o livro, publicado em 2018 no tempo na parte de trás.
{
"inquerir":{
"Impulsionar": {
"positivo":{
"Combine":{
"Title": "java"
}
},
"negativo":{
"alcance":{
"PublishAt": {
"LTE": "2018/01/01"
}
}
"Negative_boost": 0,2
}
}
}
13
exemplos Java são como se segue:
MatchPhraseQueryBuilder titleQuery = QueryBuilders.matchPhraseQuery ( "título", "Java");
RangeQueryBuilder publishAt = QueryBuilders.rangeQuery ( "publishAt") LTE ( "2018/01/01").;
QueryBuilders.boostingQuery (titleQuery, publishAt) .negativeBoost (0.2f);
2. consulta aninhada
2.1 Sons inquérito
Aqui para lojas e commodities, por exemplo, eles pertencem a diferentes tipos, o equivalente a duas tabelas no banco de dados, se você deseja executar a loja e mercadoria associado você precisa dizer a um relacionamento pai-filho entre o documento ES, especificar um campo aqui store2product para manter este relacionamento, o tipo de campo para se juntar, e especificar seu relacionamento.
2.1.1 Criar um índice de relacionamento entre pais e filhos
loja PUT
{
"mapeamentos": {
"propriedades": {
"Nome": {
"Type": "texto",
"Analisador": "ik_max_word",
"Search_analyzer": "ik_smart"
},
"Store2product": {
"Type": "join",
"relações": {
"Storeid": "ProductID"
}
}
}
}
}
2.2.2 Adição de documentos de relações
Adicione o documento pai (lojas), e especificar o campo pai
loja PUT / 1
{
"Nome": "Real comida recorde da franquia shop"
"Store2product": "storeid"
}
Adicionar um documento filho (commodities), e exigir que o documento filho e documento pai na mesma fatia, você precisa especificar o pai id rota id
loja PUT / 2? = 1 encaminhamento
{
"Nome": "criar um verdadeiro sabor de cranberry instantânea suco de ameixa em pó fabricado em chá, suco de bebidas 1000g ameixa azeda raw"
"Store2product": {
"Nome": "ProductID",
"Pai": "1"
}
}
2.2.3 mercadoria consulta na loja
Use consulta has_parent, e especificar PARENT_TYPE como storeid
GET loja / _search
{
"inquerir": {
"Has_parent": {
"PARENT_TYPE": "storeid",
"inquerir": {
"Combine": {
"nome": "lojas de comida"
}
}
}
}
}
exemplos Java são como se segue:
MatchQueryBuilder NameQuery = QueryBuilders.matchQuery ( "name", "Lojas de alimentos");
HasParentQueryBuilder hasParentQueryBuilder = new HasParentQueryBuilder ( "storeid", NameQuery, true);
2.2.4 Consultas pertencem a qual loja de produtos
Use consulta has_child e especifique um productid tipo de campo
GET loja / _search
{
"inquerir": {
"Has_child": {
"Type": "ProductID",
"inquerir": {
"Combine": {
"Nome": "sabor ameixa azeda"
}
}
}
}
}
exemplos Java são como se segue:
MatchQueryBuilder NameQuery = QueryBuilders.matchQuery ( "name", "sabor suco de ameixa");
HasChildQueryBuilder hasChildQueryBuilder = new HasChildQueryBuilder ( "ProductID", NameQuery, ScoreMode.None);
Fonte: https://blog.csdn.net/dwjf321/article/details/103934964