Поиск MongoDB $ text $ не найден с ключевыми словами: ['by', 'and', 'me' ...] - PullRequest
0 голосов
/ 06 августа 2020

У меня был вопрос об использовании find для поиска по ключевым словам 'by', 'и' ... в моих коллекциях, но в какой-то ситуации это было неправильно, кто-нибудь знает, как это исправить?

Это это моя коллекция и индексы:

db.stores.insert(
   [
     { _id: 1, name: "Java Hut", description: "Coffee and cakes by Me" },
     { _id: 2, name: "Burger Buns", description: "by" },
     { _id: 3, name: "Coffee Shop", description: "Just coffee" },
     { _id: 4, name: "Clothes Clothes Clothes", description: "By Clothes" }
   ]
)

db.stores.createIndex( { name: "text", description: "text" } )

И с этими скриптами все будет в порядке

db.stores.find({description: /by/})
db.stores.find({description: /and/})
db.stores.find( { $text: { $search: "java coffee shop" } } )
db.stores.find( { $text: { $search: "\"coffee shop\"" } } )
db.stores.find( { $text: { $search: "\"and cakes by\"" } } )
db.stores.find( { $text: { $search: "and cakes by" } } )
db.stores.find( { $text: { $search: "cakes" } } )
db.stores.find( { $text: { $search: "coffee" } } )

Но что-то здесь идет не так, я не понимаю, почему ключевое слово 'by', 'and' , "я" ... не может использоваться в этом запросе. Почему что-то идет не так, когда я использую только его в текстовом поиске?

db.stores.find( { $text: { $search: "by" } } )
db.stores.find( { $text: { $search: "and" } } )

Если у вас есть do c или ссылка об этом, дайте мне. Или, если этот вопрос существовал где-то еще, дайте мне тоже.

Спасибо!

Отредактировано: аналогичный вопрос имеет другой Отключить фильтрацию стоп-слов в текстовом поиске MongoDB

Ответы [ 2 ]

2 голосов
/ 06 августа 2020

@D.SM ответ идеален. В дополнение к этому,

Если вы укажете языковое значение «none», тогда текстовый индекс будет использовать простую разметку без списка стоп-слов и без разбивки на корень.

db.quotes.createIndex(
   { name : "text" },
   { default_language: "none" } ---> Note here
)

MongoDB поддерживает текстовый поиск для различных языков. текстовые индексы отбрасывают специфичные для языка c стоп-слова (например, на английском языке sh, the, an, a и, et c.) и используют простое определение суффикса c, определяющее язык. Список поддерживаемых языков см. В разделе Языки текстового поиска.

2 голосов
/ 06 августа 2020

Они называются стоп-словами и обычно не используются для поиска.

Для поиска фразы заключите фразу в кавычки.

...