Elasti c Поиск в полнотекстовом поиске - PullRequest
1 голос
/ 27 января 2020

Я сохраняю содержимое двух PDF-документов в Elasti c Поиск. Направление _source.attachment.content, и я хочу выполнить полнотекстовый поиск.

Теперь у меня есть два разных файла PDF в Elasti c Поиск 2, которые содержат слово: «Обзор» и другие без этого. слово.

Я ищу это так:

GET _search
{ 
   "_source":[ 
      "attachment.*",
      "meta.*"
   ],
   "query":{ 
      "bool":{ 
         "must":[ 
            { 
               "multi_match":{ 
                  "query":"Over",
                  "fuzziness":2
               }
            },
            { 
               "match":{ 
                  "meta.teamId":"specific id"
               }
            }
         ]
      }
   }
}

В результате я получаю один из двух документов и множество других документов без подстроки "over". Если я наберу "overv", никакие документы, содержащие эту подстроку, не будут возвращены как результат. Если я наберу «обзор», то найду только два документа, которые хочу иметь.

Есть ли что-нибудь, что я могу сделать лучше?

Заранее спасибо

Редактировать: хит выглядит следующим образом:

{
        "_index" : "docs",
        "_type" : "_doc",
        "_id" : "UO8RI28B94W61yv-lXqW",
        "_score" : 16.099525,
        "_source" : {
          "attachment" : {
            "date" : "2019-12-20T11:28:13Z",
            "content_type" : "application/pdf",
            "language" : "et",
            "title" : "Microsoft Word - Dokument1",
            "content" : """
Test    PDF 

2345    

Etwas   

Overview
""",
            "content_length" : 42
          },
          "meta" : {
            "teamId" : "specific id"
          }
        }
      }

вот отображение:

"mappings" : {
  "properties" : {
    "attachment" : {
      "properties" : {
        "content" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    },
    "contentId" : {
      "type" : "text",
      "fields" : {
        "keyword" : {
          "type" : "keyword",
          "ignore_above" : 256
        }
      }
    }
    "meta" : {
      "properties" : {
        "teamId" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    },
    "teamId" : {
      "type" : "text",
      "fields" : {
        "keyword" : {
          "type" : "keyword",
          "ignore_above" : 256
        }
      }
    }
  }
}

1 Ответ

0 голосов
/ 27 января 2020

Вам необходимо проиндексировать свои данные с помощью токенайзера nGram (https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-ngram-tokenizer.html)

Подробнее можно прочитать здесь - https://qbox.io/blog/an-introduction-to-ngrams-in-elasticsearch

...