Как лучше всего индексировать документы, содержащие математическое выражение в поиске elasti c? - PullRequest
2 голосов
/ 01 апреля 2020

Проблема, которую я пытаюсь решить, состоит в том, что у меня есть куча документов, в которых содержатся математические выражения / формулы. Я хочу искать документы по формуле или выражению.

Пока что, основываясь на своих исследованиях, я планирую преобразовать математическое выражение в формат латекса и сохранить его в виде строки в базе данных (elasti c search ).

При таком подходе я смогу искать документы с латексной строкой?

Пример преобразования в латекс a2 + b2 = c2 - это ^ {2} + b ^ {2} = с ^ {2}. Может ли эта строка быть доступной для поиска в elasti c search?

1 Ответ

1 голос
/ 01 апреля 2020

Я согласен с пользователем @Lue E с некоторыми дополнительными модификациями и попробовал использовать простой подход с использованием ключевых слов, но у меня возникли некоторые проблемы, поэтому я изменил свой подход к использованию токенизатора keyword в своем собственном настраиваемом анализаторе который должен решить большинство ваших сценариев использования.

Определение индекса с помощью пользовательского анализатора

{
    "settings": {
        "analysis": {
            "analyzer": {
                "my_custom_analyzer": {
                    "type": "custom",
                    "tokenizer": "keyword", --> to make it searchable
                    "filter": [
                        "lowercase", --> case insensitive search
                        "trim" --> remove extra spaces
                    ]
                }
            }
        }
    },
    "mappings": {
        "properties": {
            "mathformula": {
                "type": "text",
                "analyzer": "my_custom_analyzer"
            }
        }
    }
}

Примеры документов индекса

 {
        "mathformula" : "(a+b)^2 = a^2 + b^2 + 2ab"
    }

{
    "mathformula" : "a2+b2 = c2"
}

Поисковый запрос (соответствует запросу, использует тот же анализатор индекса времени)

{
    "query": {
        "match" : {
            "mathformula" : {
                "query" : "a2+b2 = c2"
            }
        }
    }
}

Результат поиска содержит только первый индексированный do c

 "hits": [
            {
                "_index": "so_math",
                "_type": "_doc",
                "_id": "1",
                "_score": 0.6931471,
                "_source": {
                    "mathformula": "a2+b2 = c2"
                }
            }
        ]
...