Соответствует, когда абзац содержит предложения из индексов с Elasticsearch - PullRequest
0 голосов
/ 07 февраля 2020

Я используюasticsearch для создания программы, позволяющей найти все места в тексте, где цитируется Библия, а также место, где упомянут стих, я проиндексировал все стихи Библии вasticsearch, каждый стих является документом Когда я выполняю поиск, частично печатая стих, я нахожу правильный результат (даже совершая ошибки). Как просмотреть текст, чтобы найти все случаи, когда стих цитируется (даже частичный), и, таким образом, приписать источник стиха их? и терпеть ошибки (с параметром нечеткости или используя синонимы, я думаю)

Пример моего индекса:

{"index":{"_index":"test","_type":"","_id":1}}
{"fields":{"year":3560,"book":"1","chapter":1,"section":1,"text":"others words consectetur adipiscing and others words"},"id":"test1","type":"add"}
{"index":{"_index":"test","_type":"","_id":2}}
{"fields":{"year":3560,"book":"2","chapter":3,"section":2,"text":"others words a sagittis nisl quam and others words"},"id":"test2","type":"add"}
{"index":{"_index":"test","_type":"","_id":3}}
{"fields":{"year":3560,"book":"3","chapter":1,"section":5,"text":"others words Aliquam ultrices auctor pharetra and others words"},"id":"test3","type":"add"}
{"index":{"_index":"test","_type":"","_id":4}}
{"fields":{"year":3560,"book":"4","chapter":2,"section":4,"text":"others words Proin ut vestibulum and others words"},"id":"test4","type":"add"}
{"index":{"_index":"test","_type":"","_id":5}}
{"fields":{"year":3560,"book":"5","chapter":1,"section":5,"text":"others words Aenean pretium tincidunt aliquet and others words"},"id":"test5","type":"add"}
{"index":{"_index":"test","_type":"","_id":6}}
{"fields":{"year":3560,"book":"6","chapter":2,"section":1,"text":"others words In vitae sagittis and others words"},"id":"test6","type":"add"}
{"index":{"_index":"test","_type":"","_id":7}}
{"fields":{"year":3560,"book":"7","chapter":7,"section":7,"text":"others words ligula laoreet pharetra and others words"},"id":"test7","type":"add"}
{"index":{"_index":"test","_type":"","_id":8}}
{"fields":{"year":3560,"book":"8","chapter":1,"section":4,"text":"others words luctus eros a pretium and others words"},"id":"test8","type":"add"}
{"index":{"_index":"test","_type":"","_id":9}}
{"fields":{"year":3560,"book":"9","chapter":1,"section":7,"text":"others words ullamcorper eu id quam and others words"},"id":"test9","type":"add"}
{"index":{"_index":"test","_type":"","_id":10}}
{"fields":{"year":3560,"book":"10","chapter":5,"section":4,"text":"others words Nullam ac enim ac lacus hendrerit and others words"},"id":"test10","type":"add"}

Мне нужно найти все вхождения в абзаце, которые есть в индексе, чтобы восстановить их источники:

Lorem ipsum dolor sit amet, consiptetur adipiscing elit. Nulla rhoncus, nulla vitae porta euismod, purus nisl faucibus nun c, сагиттис нисл квам id arcu. Sed sit Amet Arcu Sed Dui Auctor Bibendum. Proin ut vestibulum sem, id rutrum felis. Phasellus sagittis justo sit amet justo coequat, id scelerisque eros cursus. Quisque dapibus finibus euismod. Proin dui urna, auctor ut gravida quis, fringilla quis Velit. Готово c седь пульвинар лев. Sed pulvinar pharetra arcu ne c egestas. Mauris non dapibus diam. Pellentesque quis pellentesque libero. Aliquam ultrices auctor pharetra . Cras ullamcorper, odio sit amet aliquam convallis, magna nibh gravida nun c, sit amet volutpat elit purus eget lectus. Pellentesque eu Eisism Euismod Conquat. Duis id erat porttitor, sodales justo non, aliquet ex. Etiam tincidunt neque ut nisi Командный аукционер. Sed congue urna c Tellus Scelerisque Hendrerit. Mauris lobortis sed dui ut varius. Проин c luctus felis. In vitae sagittis erat, ne c luctus sapien. Энеевский прециум тикцидукт аликет . Morbi at enim vel ligula laoreet pharetra . Sed dignissim luctus eros pretium . Вестибул молест ie мол> 1065 * ниси, биография сциллерика нибх бибендум н c. Готово c laoreet sapien sed Vehicleula dictum. Nullam a c enim a c lacus hendrerit tempor et vitae neque. Quisque at leo pretium, efficitur augu vitae, congue eros. Maecenas volutpat ante ne c vestibulum. Готово c tristique orci erat, ne c imperdiet nulla commodo ut. Nam non odio vel quam cursus ullamcorper eu id quam . Duis volutpat, nisl eu interdum mattis, augue ipsum mollis leo, eget efficitur orci augu eget leo. Integer feugiat facilisis dolor ut vehicleula. Maecenas quis feugiat massa. Curabitur feugiat odio eget ligula tincidunt sodales. Готово c feugiat dapibus lectus, non maximus dui rhoncus vitae. Phasellus eget massa faucibus, tristique nibh sed, aliquet metus.

Я не знаю, достаточно ли я ясен, но не стесняйтесь спросить меня, нужна ли вам более высокая точность

I думаю, что эта проблема решается с помощью алгоритма Aho-Corasick, но я не знаю, как интегрировать его вasticsearch

Спасибо!

1 Ответ

0 голосов
/ 10 февраля 2020

Если я в состоянии правильно понять ваш вопрос, то все, что вы ищете, - это

"некоторые частичные стихи": запрос

и получение исходные документы изasticsearch в качестве ответа с результатами, показывающими искомый стих в них (что и означает выделение)

Вот самый простой из запросов для достижения того же

GET <index_name>/_search
{
 "query": {
   "match": {
     "message": "partial verse"
   }
 } ,
    "highlight" : {
        "fields" : {
            "message": {}
        }
    }
}

В в ответ вы получите что-то вроде этого

"hits" : [
      {
        "_index" : "testSample",
        "_type" : "_doc",
        "_id" : "TkdvGXAB5bHyIJQ-QRow",
        "_score" : 0.2876821,
        "_source" : {
          "bookName" : "bible",
          "message" : "this is a good book"
        },
        "highlight" : {
          "message" : [
            "<em>this</em> is a good book"
          ]
        }
      }
    ]

Ответ не требует пояснений, где вы получите высокие результаты в другом разделе.

...