5

这是一个两部分的问题。

我的文件如下所示:

{"url": "https://someurl.com", 
 "content": "searchable content here", 
 "hash": "c54cc9cdd4a79ca10a891b8d1b7783c295455040", 
 "headings": "more searchable content", 
 "title": "Page Title"}

我的第一个问题是如何检索“标题”正好是“无标题”的所有文档。我不希望出现标题为“此文档没有标题”的文档。

我的第二个问题是如何检索“url”恰好出现在长长的 url 列表中的所有文档。

我正在使用 pyelasticsearch,但 curl 中的通用答案也可以。

4

3 回答 3

10

您必须为字段定义映射。

如果您正在寻找确切的值(区分大小写),您可以将 index 属性设置为not_analyzed.

就像是 :

"url" : {"type" : "string", "index" : "not_analyzed"}
于 2012-10-12T22:16:18.443 回答
7

试试这个方法。这是工作。

import json
from elasticsearch import Elasticsearch
connection = Elasticsearch([{'host': host, 'port': port}])

elastic_query = json.dumps({
     "query": {
         "match_phrase": {
            "UserName": "name"
          }
      }
 })
result = connection.search(index="test_index", body=elastic_query)
于 2018-05-17T06:00:37.480 回答
3

如果您存储了源(这是默认设置),您可以使用脚本过滤器

它应该是这样的:

$ curl -XPUT localhost:9200/index/type/1 -d '{"foo": "bar"}'
$ curl -XPUT localhost:9200/index/type/2 -d '{"foo": "bar baz"}'
$ curl -XPOST localhost:9200/index/type/_search?pretty=true -d '{
"filter": {
    "script": {
        "script": "_source.foo == \"bar\""
    }
}
}'
{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "index",
      "_type" : "type",
      "_id" : "1",
      "_score" : 1.0, "_source" : {"foo": "bar"}
    } ]
  }
}

编辑:我认为值得一提的是“not_analyzed”映射应该是更快的方法。但是,如果您想要该字段的完全匹配和部分匹配,我看到两个选项:使用脚本或索引数据两次(一次分析,一次不分析)。

于 2012-10-13T19:37:24.333 回答