-1

我正在使用 elasticsearch-py 来索引推文(最初是 JSON 格式)。为了保留主题标签、用户目标和表情符号等特殊字符,我在创建索引时指定了特殊映射。这是它的样子:

from elasticsearch import Elasticsearch
import sys,json
es = Elasticsearch()

es.indices.create(
    index='ecommercetweets',
    body={
          "settings" : {
                "index" : {
                    "number_of_shards" : 1,
                    "number_of_replicas" : 1
                },  
                "analysis" : {
                    "filter" : {
                        "tweet_filter" : {
                            "type" : "word_delimiter",
                            "type_table": ["# => ALPHA", "@ => ALPHA", ":) => ALPHA", ":( => ALPHA"]
                        }   
                    },
                    "analyzer" : {
                        "tweet_analyzer" : {
                            "type" : "custom",
                            "tokenizer" : "whitespace",
                            "filter" : ["lowercase", "tweet_filter"]
                        }
                    }
                }
            },
            "mappings" : {
                "tweet" : {
                    "properties" : {
                        "text" : {
                            "analyzer" : "tweet_analyzer"
                        }
                    }
                }
            }
      },
      ignore=400
)

fin = open(sys.argv[1],"r")
count = 0
for line in fin:
    jsonLine = json.loads(line)
    doc = {
        'tweetId' : jsonLine["id"],
        'text' : jsonLine["text"],
        'userId' : jsonLine["user"]["id"],
        'favorite_count' : jsonLine["favorite_count"],
        'retweet_count' :jsonLine["retweet_count"],
        'language': jsonLine["lang"],
        'dateTime':jsonLine["created_at"],
        'location':jsonLine["place"]
    }

    es.index(index='ecommercetweets', doc_type='tweet', id=count, body=doc)
    count+=1

我正在使用以下命令进行搜索:

results1 = es.search(index='ecommercetweets',q="text:delivery")
results2 = es.search(index='ecommercetweets',q="text:#delivery")

两者都返回相同数量的命中,尽管我很确定我使用的数据不应该是这种情况。

我的搜索命令有问题吗?

4

1 回答 1

1

处理它的一种方法是使用术语查询(或术语过滤器)。这应该这样做:

es.search(index='ecommercetweets',body={
   "query": {
      "term": {
         "text": {
            "value": "#delivery"
         }
      }
   }
})

这是我用来玩它的一些代码:

http://sense.qbox.io/gist/fe61f0cd92b465276b261100cbe7f4778002a96d

于 2015-04-28T12:47:40.443 回答