使用术语查询无法正常工作

时间:2015-07-01 10:48:21

标签: elasticsearch

我在Elasticsearch(1.6)

中有这个文档
{
"_index": "onkopedia",
"_type": "document_",
"_id": "0afa26afc2d1440a8ed03dac0e8511fc",
"_version": 1,
"_score": null,
"_source": {
"description": "",
"contributors": [ ],
"metaTypeName": "Connector",
"sortableTitle": "mammakarzinom der frau",
"subject": [ ],
"authorizedUsers": [
"Anonymous"
],
"language": "",
"title": "Mammakarzinom der Frau",
"url": "http://dev1.veit-schiele.de:9080/onkopedia/de/onkopedia/guidelines/mammakarzinom-der-frau",
"author": "ajung",
"modified": "2015-05-11T05:21:14",
"metaType": "xmldirector.plonecore.connector",
"content": " Mammakarzinom der Frau Stand: Januar 2013 Autoren der aktuellen .....",
"authorName": "ajung",
"created": "2015-05-11T05:21:14",
"review_state": "published"
},
"sort": [
null
]
}

包含密钥

'authorizedUsers': ['Anonymous']

以下查询应该返回上面的文档,但它不会:

 {
  "sort": [
    "_score"
  ], 
  "from": 0, 
  "fields": [
    "url", 
    "title", 
    "description", 
    "metaType", 
    "metaTypeName", 
    "author", 
    "authorName", 
    "contributors", 
    "modified", 
    "subject", 
    "review_state", 
    "language", 
    "content"
  ], 
  "query": {
    "filtered": {
      "filter": {
        "and": [
          {
            "terms": {
              "execution": "or", 
              "metaType": [
                "Document", 
                "FormFolder", 
                "Collection", 
                "Discussion Item", 
                "News Item", 
                "xmldirector.plonecore.connector", 
                "CaptchaField"
              ]
            }
          }, 
          {
            "terms": {
              "execution": "or", 
              "authorizedUsers": [
                "Manager", 
                "Authenticated", 
                "Anonymous", 
                "user:ajung"
              ]
            }
          }
        ]
      }, 
      "query": {
        "query_string": {
          "query": "mammakarzinom", 
          "default_operator": "AND", 
          "fields": [
            "title^3", 
            "contributors^2", 
            "subject^2", 
            "description", 
            "content"
          ]
        }
      }
    }
  }, 
  "highlight": {
    "fields": {
      "content": {
        "fragment_size": 250, 
        "number_of_fragments": 3
      }, 
      "description": {
        "fragment_size": 250, 
        "number_of_fragments": 2
      }, 
      "title": {
        "number_of_fragments": 0
      }
    }
  }, 
  "size": 15
}

没有'authorizedUsers'过滤器的查询会返回文档。 为什么? 'anonymous'作为'authorizedUsers'的值在查询中可用,所以我希望第一个查询可以找到该文档,或者?

{
  "sort": [
    "_score"
  ], 
  "from": 0, 
  "fields": [
    "url", 
    "title", 
    "description", 
    "metaType", 
    "metaTypeName", 
    "author", 
    "authorName", 
    "contributors", 
    "modified", 
    "subject", 
    "review_state", 
    "language", 
    "content"
  ], 
  "query": {
    "filtered": {
      "filter": {
        "and": [
          {
            "terms": {
              "execution": "or", 
              "metaType": [
                "Document", 
                "FormFolder", 
                "Collection", 
                "Discussion Item", 
                "News Item", 
                "xmldirector.plonecore.connector", 
                "CaptchaField"
              ]
            }
          }

        ]
      }, 
      "query": {
        "query_string": {
          "query": "mammakarzinom", 
          "default_operator": "AND", 
          "fields": [
            "title^3", 
            "contributors^2", 
            "subject^2", 
            "description", 
            "content"
          ]
        }
      }
    }
  }, 
  "highlight": {
    "fields": {
      "content": {
        "fragment_size": 250, 
        "number_of_fragments": 3
      }, 
      "description": {
        "fragment_size": 250, 
        "number_of_fragments": 2
      }, 
      "title": {
        "number_of_fragments": 0
      }
    }
  }, 
  "size": 15
}

1 个答案:

答案 0 :(得分:1)

authorizedUsers字段的分析器可能会降低值本身的值。因此,在索引中,实际值为anonymous(小写a)。

试试这个过滤器:

     {
        "terms": {
          "execution": "or", 
          "authorizedUsers": [
            "manager", 
            "authenticated", 
            "anonymous", 
            "user:ajung"
          ]
        }
      }

意思是,使用实际存在的值搜索索引。 还有一件事:terms没有分析输入文本。这意味着如果您搜索Anonymous,那么这就是它将在索引中查看的内容。由于索引中有anonymous,因此不匹配。