Я пытаюсь использовать ElasticSearch для поиска почты в моей базе данных Cassandra
Вот моя структура таблицы:
CREATE TABLE mail__mail (
id uuid,
"accountId" uuid,
attachment set<uuid>,
categories set<uuid>,
content text,
date timestamp,
es_query text,
"folderId" uuid,
hash text,
"isConfidential" boolean,
"isDeleted" boolean,
"isImportant" boolean,
"isSeen" boolean,
"mailCc" text,
"mailFrom" text,
"mailId" text,
"mailTo" text,
size bigint,
subject text,
PRIMARY KEY (id)
)
Я использую драйвер Python3 Cassandra, с ORM для вставки данных вэта таблица и я использую ES для поиска в этой таблице, вот мое отображение:
{
"settings": {
"index": {
"analysis": {
"filter": {},
"analyzer": {
"edge_ngram_analyzer": {
"filter": [
"lowercase"
],
"tokenizer": "edge_ngram_tokenizer"
},
"edge_ngram_search_analyzer": {
"tokenizer": "lowercase"
}
},
"tokenizer": {
"edge_ngram_tokenizer": {
"type": "edge_ngram",
"min_gram": 2,
"max_gram": 20,
"token_chars": [
"letter",
"digit",
"whitespace",
"punctuation"
]
}
}
}
}
},
"mappings": {
"mail__mail": {
"properties": {
"mailFrom": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
},
"ngram": {
"type": "text",
"analyzer": "edge_ngram_analyzer",
"search_analyzer": "edge_ngram_search_analyzer"
}
},
"cql_collection" : "singleton"
},
"subject": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
},
"ngram": {
"type": "text",
"analyzer": "edge_ngram_analyzer",
"search_analyzer": "edge_ngram_search_analyzer"
}
},
"cql_collection" : "singleton"
},
"date" : {
"type" : "date",
"cql_collection" : "singleton"
},
"folderId" : {
"type" : "text",
"cql_collection" : "singleton"
},
"hash" : {
"type" : "text",
"cql_collection" : "singleton"
}
}
}
}
}
Я хотел бы отфильтровать почту по mailFrom, по теме, folderId или по хешу и упорядочить их по дате.
Но когда я вставляю данные и пытаюсь выполнить поиск, например, по хешу, иногда индексы ES полностью пусты, а когда почта индексируется, он не находит их.Я пытаюсь rebuild_index, исправление nodetool, очистка или обновление моего индекса, но ничего не меняется.Что не так с тем, что я делаю?Почему мой индекс не обновляется, когда я вставляю новые данные в свою таблицу?
РЕДАКТИРОВАТЬ: Мой столбец FolderId имеет тип UUID, и ElasticSearch не может сопоставить UUID для текста, как я могу сопоставить мой столбец folderId?
РЕДАКТИРОВАТЬ 1: тип ключевого слова был решением.Теперь все отлично работает.