WordNet на Python с кодом запросаasticsearch не дает правильного ответа - PullRequest
0 голосов
/ 11 октября 2018

Я написал этот код Python, где я сначала указываю data mapping для контента, а затем поисковый запрос для контента в Elasticsearch:

Отображение данных:

data_mapping = {

        "settings": {

            "analysis": {

                "filter": {

                    "stop_words": {
                        "type": "stop",
                        "stopwords": "_english_"
                    },
                    "stemmer_stem": {
                        "type": "standard",
                        "language": "english"
                    },
                    "synonym": {
                        "type": "synonym",
                        "synonyms_path": "wn_s.pl"
                    }
                },
                "analyzer": {
                    "analyzer": {
                        "tokenizer": "standard",
                        "filter": [
                            "stop_words",
                            "stemmer_stem",
                            "synonym"
                        ]
                    }
                }

            }
        },
        "mappings": {
            str(index_name).lower(): {
                "properties": {
                    "id": {
                        "type": "string",
                        "fields": {
                            "stemmed": {
                                "type": "string",
                                "analyzer": "analyzer"
                            }
                        }
                    },
                    "doc_q": {
                        "type": "array",
                        "fields": {
                            "stemmed": {
                                "type": "string",
                                "analyzer": "analyzer"
                            }
                        }
                    },
                    "doc_a": {
                        "type": "string",
                        "fields": {
                            "stemmed": {
                                "type": "string",
                                "analyzer": "analyzer"
                            }
                        }
                    },
                    "votes": {
                        "type": "integer",
                        "fields": {
                            "stemmed": {
                                "type": "integer",
                                "analyzer": "analyzer"
                            }
                        }
                    }

                }
            }
        }
    }

Поисковый запрос:

query1 = {

                "function_score": {

                    "query": {

                        "multi_match": {
                            "type": "phrase",
                            "query": question,
                            "fields": ["doc_q"]

                        }
                    },

                    "field_value_factor": {
                        "field": "votes",
                        "modifier": "log2p"
                    }

                }
            }


        query2 = {

                "function_score": {

                    "query": {

                        "multi_match": {
                            "type": "best_fields",
                            "query": question,
                            "fields": ["doc_q"]

                        }
                    },

                    "field_value_factor": {
                        "field": "votes",
                        "modifier": "log2p"
                    }

                }
            }


        data = {
            "query": {
                "bool": {
                    "should": [
                        query1,
                        query2
                    ]
                }
            }
        }
        response = es.search(index=str(index_name).lower(), body=data)

Я поместил файл wordnet wn_s.pl в каталог конфигурации моей установки elasticsearch.Когда я выполняю свой поисковый запрос, скажем, для слова enable, которое является синонимом able, он ничего не возвращает.Ошибка не появляется, но это не похоже на поиск синонимов в файле wordnet

. Есть ли какие-либо синтаксические / логические ошибки в моих data mapping или search query?

...