Насколько отличается команда поиска в asticsearch-py, если во время индексации я использовал пользовательский токенизацию?
Я использую asticsearch-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")
Оба возвращают одинаковое количество обращений, хотя я уверен, что это не должно относиться к данным, которые я использую.
Я ошибаюсь с командой поиска?
1 ответ
Один из способов справиться с этим - использовать запрос термина (или фильтр термина). Это должно сделать это:
es.search(index='ecommercetweets',body={
"query": {
"term": {
"text": {
"value": "#delivery"
}
}
}
})
Вот код, который я использовал для игры с ним:
http://sense.qbox.io/gist/fe61f0cd92b465276b261100cbe7f4778002a96d