我正在使用Python(3.6)、Django(2.1)、ElasticSearch(5.1.1)和Elasticsearch ch-dsl(5.4.0)进行一个项目,我需要在其中实现搜索功能。
以下是我尝试过的:
从models.py:
class searchdatamodel(models.Model):
id = models.IntegerField(null=False, primary_key=True)
company_name = models.TextField(blank=True, null=True)
city = models.TextField(blank=True, null=True)
state = models.TextField(blank=True, null=True)
zip_codes = models.TextField(blank=True, null=True)
street_address = models.TextField(blank=True, null=True)
street_address_zip = models.TextField(blank=True, null=True)
county = models.TextField(blank=True, null=True)
phone_number = models.DecimalField(max_digits=65535, decimal_places=65535, blank=True, null=True)
fax_number = models.DecimalField(max_digits=65535, decimal_places=65535, blank=True, null=True)
web_address = models.TextField(blank=True, null=True)
last_name = models.TextField(blank=True, null=True)
first_name = models.TextField(blank=True, null=True)
contact_title = models.TextField(blank=True, null=True)
contact_gender = models.TextField(blank=True, null=True)
actual_employee_size = models.IntegerField(blank=True, null=True)
employee_size_range = models.TextField(blank=True, null=True)
actual_sales_volume = models.IntegerField(blank=True, null=True)
sales_volume_range = models.TextField(blank=True, null=True)
primary_sic = models.IntegerField(blank=True, null=True)
primary_sic_description = models.TextField(blank=True, null=True)
secondary_sic_1 = models.IntegerField(blank=True, null=True)
secondary_sic_description_1 = models.TextField(blank=True, null=True)
secondary_sic_2 = models.IntegerField(blank=True, null=True)
secondary_sic_description_2 = models.TextField(blank=True, null=True)
credit_alpha_score = models.TextField(blank=True, null=True)
credit_numeric_score = models.IntegerField(blank=True, null=True)
headquarters_branch = models.TextField(blank=True, null=True)
square_footage = models.TextField(blank=True, null=True)
registry_date = models.IntegerField(blank=True, null=True)
class Meta:
managed = False
db_table = 'searchdatamodel'
# Implement indexing for SearchDataModel model
def indexing(self):
SearchDataIndex.init()
obj = SearchDataIndex(
id=self.id,
company_name=self.company_name,
city=self.city,
state=self.state,
zip_code=self.zip_codes,
street_address=self.street_address,
street_address_zip=self.street_address_zip,
county=self.county,
phone_number=self.phone_number,
fax_number=self.fax_number,
web_address=self.web_address,
last_name=self.last_name,
first_name=self.first_name,
contact_title=self.contact_title,
contact_gender=self.contact_gender,
actual_employee_size=self.actual_employee_size,
actual_sales_volume=self.actual_sales_volume,
primary_sic=self.primary_sic,
primary_sic_description=self.primary_sic_description,
registry_date=self.registry_date
)
obj.save()
return obj.to_dict(include_meta=True)
来自serach.py:
class SearchDataIndex(DocType):
id = Integer()
company_name = Text()
city = Text()
state = Text()
zip_codes = Text()
street_address = Text()
street_address_zip = Integer()
county = Text()
phone_number = Text()
fax_number = Text()
web_address = Text()
last_name = Text()
first_name = Text()
contact_title = Text()
contact_gender = Text()
actual_employee_size = Integer()
actual_sales_volume = Text()
primary_sic = Text()
primary_sic_description = Text()
registry_date = Date()
class Meta:
index = 'data-search'
# A method for bulk indexing
def bulk_indexing():
SearchDataIndex.init()
es = Elasticsearch()
bulk(client=es, actions=(b.indexing() for b in
models.searchdatamodel.objects.all().iterator()))
当我尝试运行bulk\u索引函数时,它返回如下错误:
文件"/用户/abdul/PycharmProjects/Dmitry/DVirEnv/lib/python3.6/site-包/elasticsearch/连接/base.py",第125行,_raise_error提高HTTP_EXCEPTIONS. get(status_code,TransportError)(status_code,error_message,additional_info)
elasticsearch.exceptions。RequestError:TransportError(400,“非法参数异常”,“不同类型的映射器[zip\u代码]、当前类型[integer]、合并类型[text])
我曾尝试在模型中将zip_代码类型更改为IntegerField,但没有成功。
这里能有什么错呢?
提前感谢!
不幸的是,您不能就这样更改类型。您必须重新映射索引,这只是删除索引,然后再次运行映射函数。
要删除索引,请运行
es = Elasticsearch()
es.indices.delete(index='data-search')
然后通过再次运行批量索引器来映射索引。
注意:任何存量数据都将保持旧的数据类型,因此如果您需要保存数据但更改数据类型,那将是一个完全不同的蠕虫,涉及制作新版本的索引并将旧数据读入其中。
你好,我正在尝试实现java hadoop应用程序。我想制作映射器 我在主类中有这样的配置: 在这里,我必须说将使用哪个输出键和输出值。有没有可能将其设置为 ok 对于映射器使用此输出键和值,但对于组合器使用不同的? 非常感谢您的回答
类型映射 web3j中使用的原生Java到ABI类型映射如下: boolean -> bool BigInteger -> uint/int byte[] -> bytes String -> string and address types List<> -> dynamic/static array BigInteger类型必须用于数字类型,因为Ethereum以太坊中的数字类型是256位整数
我对Flutter编程非常陌生,我正在尝试导入一个本地JSON文件,其中包含书籍数据,如标题、作者、发布年份等。 最初我使用JSON-to-DART转换器来组装一个图书数据模型,现在我正在尝试创建一个函数,在该函数中,程序获取本地JSON文件,并使用类中的方法将数据解析为地图。 我遇到的问题是返回类型
我有两个需要映射的继承层次结构。一个层次结构是国内的,另一个是野生的。我有抽象的Domestic动物和具体的DomesticCat和DomesticDog扩展它。在第二个层次结构中,我有抽象的Wild动物和具体的WildCat和WildDog扩展它。我还有另外两个类,分别是WildAnimalFeeder具有Wild动物的成员对象和DomesticAnimalFeeder具有DomesticAni