ElasticSearch не синхронизирует индекс с кассандрой - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь использовать 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: тип ключевого слова был решением.Теперь все отлично работает.

...