Возврат, если строка содержит 90% слов в массиве - PullRequest
1 голос
/ 10 января 2020

У меня все в эластичном поиске, но решение этой проблемы для меня немного сложнее. Если у меня есть массив слов, как я могу искать документы, которые имеют строковое поле, которое содержит, скажем, 90% этих слов?

например,

iKnowTheseWords = ["word1","word2","word3","word4","word5","word6","word7","word8","word9"]

documents = [
  {
    "id": "1",
    "content": "word1 word2 word3 word4 word5 word6 word7 word8 word9 word10"
  },
  {
    "id": "2",
    "content": "word1 word2 word3 word4"
  },
  {
    "id": "3",
    "content": "word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12 word13 word14"
  }
]

В приведенном выше примере Я хотел бы, чтобы документы с идентификаторами 1 и 2 были возвращены, но не 3, поскольку в нем больше слов, чем я знаю, и выше порога 90% (документ 1 в порядке, поскольку я знаю 90% этих слов).

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

Спасибо за любую помощь заранее.

Ответы [ 2 ]

1 голос
/ 10 января 2020

Я никогда не делал этого, но я бы начал с просмотра в запросах bool или с постоянным счетом , чтобы вы могли количественно оценить счет на основе количества попаданий

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

В простом JavaScript с использованием функционального программирования вы можете сделать что-то вроде этого:

var threshold = 0.9; // 90%
var found = documents
   .filter(document => {
      var numberOfWordsFound = iKnowTheseWords
         .reduce((total, word) => {
            var hasWord = document.content.split(word).length > 1;
            return hasWord ? (total + 1) : total;
         }, 0);
      var precentage = numberOfWordsFound / iKnowTheseWords.length;
      return precentage > threshold;
   });

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...