Stemming does not work properly for MongoDB text index

后端 未结 3 1401
渐次进展
渐次进展 2021-01-20 10:23

I am trying to use full text search feature of MongoDB and observing some unexpected behavior. The problem is related to \"stemming\" aspect of the text indexing feature. T

3条回答
  •  不要未来只要你来
    2021-01-20 10:58

    Michael,

    The "language" field (if present) allows each document to override the
    language in which the stemming of words would be done. I think, as
    you specified to MongoDB a language which it didn't recognize ("ENG"),
    it was unable to stem the words at all. As others pointed out, you can use the
    language_override option to specify that MongoDB should be using some
    other field for this purpose (say "lang") and not the default one ("language").

    Below is a nice quote (about full text indexing and searching) which
    is exactly related to your issue. It is taken from this book.

    "MongoDB: The Definitive Guide, 2nd Edition"

    Searching in Other Languages

    When a document is inserted (or the index is first created), MongoDB looks at the indexes fields and stems each word, reducing it to an essential unit. However, different languages stem words in different ways, so you must specify what language the index or document is. Thus, text-type indexes allow a "default_language" option to be specified, which defaults to "english" but can be set to a number of other languages (see the online documentation for an up-to-date list). For example, to create a French-language index, we could say:

    > db.users.ensureIndex({"profil" : "text", "interets" : "text"}, {"default_language" : "french"})

    Then French would be used for stemming, unless otherwise specified. You can, on a per-document basis, specify another stemming language by having a "language" field that describes the document’s language:

    > db.users.insert({"username" : "swedishChef", "profile" : "Bork de bork", language : "swedish"})

    What the book does not mention (at least this page of it doesn't) is that
    one can use the language_override option to specify that MongoDB
    should be using some other field for this purpose (say "lang") and
    not the default one ("language").

提交回复
热议问题