Skip to content

Instantly share code, notes, and snippets.

@micheller
Last active February 20, 2017 14:25
Show Gist options
  • Save micheller/6f94866f17f534430f788c207945b78b to your computer and use it in GitHub Desktop.
Save micheller/6f94866f17f534430f788c207945b78b to your computer and use it in GitHub Desktop.
# Если у вас есть две или более модели SearchIndex, у которых есть поле с одинаковым названием, то в конфиге эластика последний
# тип оверрайдит первый.
class PointIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.NgramField(document=True, use_template=True)
address = indexes.EdgeNgramField(model_attr='address')
def get_model(self):
return Point
class ParcelTerminalIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.NgramField(document=True, use_template=True)
address = indexes.CharField(model_attr='address')
def get_model(self):
return ParcelTerminal
# в указанном случае результат запроса
SearchQuerySet().models(Point).filter(address="part_of_word").count()
# будет = 0. Т.к. в эластике конфиг будет выглядеть так:
"""
// blah-blah
"address": {
"type": "string",
"analyzer": "russian_and_english"
},
// blah-blah
"""
# Я не знаю баг это или нет, может быть идея именно в том, что .filter(address="foo") без сужения поиска до модели должен
# работать одинаково.
# Но в итоге проблема решается либо переименованием полей, либо установкой для всех полей с одинаковым названием одного типа.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment