MongoDB $text $search не найден с ключевыми словами: ['by','and','me']

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

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

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" } } )

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

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

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

Спасибо!

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


person Trương Long    schedule 06.08.2020    source источник


Ответы (2)


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

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

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

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

person Gibbs    schedule 06.08.2020
comment
Спасибо за ваш пример, просто отредактируйте с none => none ^^ - person Trương Long; 06.08.2020

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

Чтобы найти фразу, заключите фразу в кавычки.

person D. SM    schedule 06.08.2020
comment
Хорошее простое объяснение - person Gibbs; 06.08.2020