query - Escapa de escape en elasticsearch
escape lucene special characters (1)
De su mapeo, parece que está usando el analizador predeterminado para el campo by_line
. Lo que esto significa es que el valor "John Kealy / BFA.com" está indexado como los siguientes términos por separado: "john", "kealy", "bfa" y "com". Ahora la consulta de term
funciona para los campos no analizados. Está buscando el término completo "John Kealy / BFA.com" que, por supuesto, no está presente en el índice invertido. Debe usar la consulta de match
lugar de la consulta de term
aquí, como se muestra a continuación:
{
"query": {
"match": {
"by_line": "John Kealy/BFA.com"
}
}
}
Si desea que esto forme parte de un filtro, puede usar fquery
siguiente manera:
{
"filter": {
"fquery": {
"query": {
"match": {
"by_line": "John Kealy/BFA.com"
}
},
"_cache": true
}
}
}
Dirijo un sitio web de fotografía. Los fotógrafos ponen su "by_line" como "Some name / ourwebsite.com".
Tengo una DSL que estoy usando para la mayoría de mis consultas, encadenando consultas de "filtro" usando "términos", que funciona muy bien en el 90% de los casos, sin embargo, en este caso obtengo cero resultados con una consulta como esta ( observe cómo traté de escapar de la barra diagonal):
body:
{query:
{filtered:
{filter:
{and:
[{term: {is_visible: true}},
{term: {"event.by_line": "john///my_website.com"}}]
}
}
}
}
Estoy usando elasticsearch versión 1.5.2
Cuando miro las asignaciones en esta URL
http://127.0.0.1:9200/development_photos/_mapping?pretty=1
este es un registro de ejemplo
{
"_index" : "development_photos",
"_type" : "photo",
"_id" : "251",
"_score" : 1.0,
"_source":{"id":251,
"name":"LET''S PANIC ISSUE 02 LAUNCH DINNER",
"image":"BFA_85_251.jpg",
"position":null,
"event_id":85,
"created_at":"2015-06-21T22:27:21.000Z",
"is_visible":true,
"img":{"thumb":"thumb.png"}
,"ppl":[{"id":429,"position":20,"person_name":"John Kealy","person_slug":"john-kealy","person_id":30}],
"keywords":[],
"event":{"id":85,
"state":"New York",
"time_created":"8:00 PM",
"date_created":"20150611",
"city":"New York",
"caption":"Let''s Panic-mosphere",
"by_line":"John Kealy/BFA.com",
"name":"LET''S PANIC ISSUE 02 LAUNCH DINNER",
"zip_processing":null
}
}
}
y mapeos
{
"development_photos" : {
"mappings" : {
"photo" : {
"properties" : {
"created_at" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"event" : {
"properties" : {
"abstract" : {
"type" : "string"
},
"author" : {
"type" : "string"
},
"by_line" : {
"type" : "string"
},
"caption" : {
"type" : "string"
},
"city" : {
"type" : "string"
},
"copyright_notice" : {
"type" : "string"
},
"country_primary_location_name" : {
"type" : "string"
},
"cover_photo_id" : {
"type" : "long"
},
"created_at" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"date_created" : {
"type" : "string"
},
"folder" : {
"type" : "string"
},
"id" : {
"type" : "long"
},
"is_private" : {
"type" : "boolean"
},
"make_public_on" : {
"type" : "string"
},
"name" : {
"type" : "string"
},
"password" : {
"type" : "string"
},
"position" : {
"type" : "long"
},
"pr_usage" : {
"type" : "boolean"
},
"province" : {
"type" : "string"
},
"purchases_disabled" : {
"type" : "boolean"
},
"state" : {
"type" : "string"
},
"sub_location" : {
"type" : "string"
},
"time_created" : {
"type" : "string"
},
"updated_at" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"uploader_id" : {
"type" : "long"
},
"view_only_password" : {
"type" : "string"
}
}
},
"event_id" : {
"type" : "long"
},
"id" : {
"type" : "long"
},
"image" : {
"type" : "string"
},
"img" : {
"properties" : {
"preview" : {
"type" : "string"
},
"thumb" : {
"type" : "string"
},
"thumb_rollover" : {
"type" : "string"
}
}
},
"is_visible" : {
"type" : "boolean"
},
"keywords" : {
"properties" : {
"id" : {
"type" : "long"
},
"name" : {
"type" : "string"
},
"tag_id" : {
"type" : "long"
}
}
},
"name" : {
"type" : "string"
},
"position" : {
"type" : "long"
},
"ppl" : {
"properties" : {
"id" : {
"type" : "long"
},
"person_id" : {
"type" : "long"
},
"person_name" : {
"type" : "string"
},
"person_slug" : {
"type" : "string"
},
"position" : {
"type" : "long"
}
}
}
}
}
}
}
}
Según la sugerencia de bittusarkar, actualicé mi consulta para usar fquery. Ahora tengo dos preguntas más. ¿Cómo puedo encadenar consultas de fquery?
Esto dará como resultado una falla de búsqueda elástica
{filtered:
{filter:
{and:
[{term:{is_visible:true}},
{term:{is_private:false}}],
fquery:
{query:
{match:
{by_line:"Kealy/BFAnyc",
sub_location:"can i chain these queries"}}}}}}
Esto da como resultado el error "consulta analizada en forma simplificada, con nombre de campo directo, pero incluye más opciones que solo el nombre del campo, posiblemente use su forma de ''opciones'', con el elemento ''consulta''?"
Además, cuando intento mezclar fquery con mi antigua forma de encadenar filtros "y", devuelve resultados que no deberían ... Parece que está ignorando las consultas "y". Por ejemplo:
{filtered:
{filter:
{and:
[{term: {is_visible:true}},
{term: {is_private: false}},
{term: {sub_location: "can"}},
{term: {sub_location: "i"}},
{term: {sub_location: "chain"}},
{term: {sub_location: "these"}},
{term: {sub_location: "queries"}}],
fquery:
{query:
{match:
{by_line:JohnKealy/BFAnyc"}}}}}}
Registros como este aparecen en los resultados de búsqueda: (observe cómo "sub_location no coincide con mi sub_location query")
{event: {"id":1,
"sub_location":"New York",
"state":nil,
"author":nil,
"copyright_notice":nil,
"country_primary_location_name":nil,
"time_created":nil,
"date_created":nil,
"city":nil,
"caption":nil,
"by_line":"JohnKealy/BFAnyc",
"abstract":nil,
"name":"John Kealy",
"province":nil,
"folder":"foo",
"password":nil,
"visible":nil,
"zip_created_at":nil,
"zip_processing":nil,
"position":0,
"pdf":nil,
"cover_photo_id":nil,
"created_at":"2015-07-16T15:53:26.000Z",
"updated_at":"2015-07-16T15:53:26.000Z",
"is_private":false,
"price_mod":nil,
"uploader_id":nil,
"view_only_password":nil,
"pr_usage":nil,
"purchases_disabled":nil,
"make_public_on":nil}}