2017-02-20 2 views
0

Мне нужен строковый поиск с использованием pymongo MongoDB, который проверяет соответствие подстрок в ключе, независимо от порядка слов и фраз.PyMongo: подстроки не зависят от слов

Давайте посмотрим пример.

В моей коллекции есть документы, например, следующие:

{'_id':..., 'key': 'the foo'} 
{'_id':..., 'key': 'the bar'} 
{'_id':..., 'key': 'the baz'} 

Если бы я искал 'key', 'Fo tHe', 'foo t' или 'foo the' в key, я хотел бы получить {'_id':..., 'key': 'the foo'}.

Лучшее решение, которое я нашел использует регулярное выражение с помощью PyMongo таким образом:

query = {'key': {'$regex' : my_string, '$options':'i'}} 
mycollection.find(query) 

Но это решение не распространяется на полностью мои требования. Например, он не возвращает документ, если my_string = 'foo the' (инвертированный порядок слов).

Есть ли эффективный способ выполнения такого поиска текста в pymongo (MongoDB)?

ответ

1

Попробуйте полнотекстовый индекс:

mycollection.create_index([("foo", "text")]) 

ли, что один раз, а затем:

for doc in mycollection.find(
    {"$text": {"$search": "foo the"}} 
).sort({"score": {"$meta": "textScore"}}): 
    print(doc) 

См MongoDB Text Indexes и sort by meta.

+0

Если я не ошибаюсь, индекс '$ text' не поддерживает частичное совпадение для подстроки ... – floatingpurr

Смежные вопросы