elasticsearch - 如何对高级查询使用 Elasticsearch :

标签 elasticsearch

我正在使用elasticsearch。我已经很深入了,但是对于如何编写高级查询我很困惑。有查询/过滤器/等。我对如何进行感到困惑。

我有一个看起来像这样的架构:

photos: {people: [{person_id: 1, person_name:"john kealy"}], 
         tags: [{tag_id: 1, tag_name:"other tag"}, 
         by_line: "John D Kealy/My website.com",
         location: "Some Place OUt West"]

我需要能够动态地将这些查询动态地组合在一起,以始终拉入完整匹配,例如我想搜寻

people.person_id:[1,2](仅在两个或更多peole的照片中拉动)
tags.tag_id:[1,2,3](仅在具有全部三个或更多标签的照片中拉出)
by_line:“John D. Kealy /我的Website.com”(全名,包括斜杠)
地点:“西部某处”

我想用所有这些项目写一个查询。我需要在“by_line”中包含斜杠,我不在乎大写或小写。我需要完全匹配的“西边某个地方”。我在这里用什么?查询或过滤器/已过滤?

最佳答案

bool(boolean) 过滤器/查询的一般准则可以在here中找到。

如果要构建“完全匹配”查询,则通常可以使用term过滤器(或查询)。

如果要构建一个需要可靠的性能速度搜索的搜索,建议使用filtered query,因为在运行查询之前设置了过滤器,通常可以提高性能。

对于您的特定示例,以下过滤器应该可以工作,将其放在matchAll查询或您需要的其他任何内容上(使用未分析的by_line字段,被分析的对象将具有查询)。这应该使您了解如何构造将来的查询:

注意:这假定未分析您的by_line字段。如果使用的是分析字段,则必须使用匹配查询,双斜杠将转义您的斜杠定界符。

在by_line上没有分析器

{
   "query" : {
      "filtered" : {
         "filter" : {
            "bool" : {
              "must" : [
                { "terms" : {"people.person_id" : ["1", "2"]}}, 
                { "terms" : {"tags.tag_id" : ["1", "2", "3"]}},
                { "term" : {"by_line" : "John D. Kealy\\/My Website.com"}}, 
                { "term" : {"location" : "some place out west"}}
              ]
           }
         }
      }
   }
}

我将在上面保留这些内容,以供将来的读者使用,但是在您的帖子历史记录中,您看到您正在使用标准分析器,您的查询应按以下结构进行。

在分析仪上by_line
{
   "query" : {
      "filtered" : {
         "query": {
            "match": {
               "by_line": "John Kealy/BFA.com"
             }
         },
         "filter" : {
            "bool" : {
              "must" : [
                { "terms" : {"people.person_id" : ["1", "2"]}}, 
                { "terms" : {"tags.tag_id" : ["1", "2", "3"]}},
                { "term" : {"location" : "some place out west"}}
              ]
            }
         }
      }
   }
}

关于elasticsearch - 如何对高级查询使用 Elasticsearch :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31525391/

相关文章:

elasticsearch - (kibana)mapper_parsing_exception

security - Elasticsearch 从哪里获取 elasticsearch-keystore 密码?

java - ElasticSearch Java API AggregationBuilder 过滤器/全局 "name"参数导致 JSON 格式错误

spring - elasticsearch-如何找到确切的日期类型值?

elasticsearch - ElasticSearch嵌套_count查询获取 “request does not support [filter]”

mongodb - 为MongoDb复制集创建ElasticSearch河

performance - Elasticsearch 基于时间的提要模块的最佳方法?

elasticsearch - 当我包含小时和分钟时,Kibana 无法从 elasticsearch 中获取日期

java - 对于 JVM 应用程序,是否有充分的理由使用 Elasticsearch REST API?

java - 如何使用脚本通过Java API更新elasticsearch文档中的一个字段?