我目前正在将Elasticsearch作为搜索界面嵌入到现有应用程序中。 该应用程序是一个带有oracle SQL数据库的经典3层应用程序。
我有实体'人物' (数据库表),具有以下属性:
到目前为止,我把它1:1放入elasticsearch中,每个db-column都是elasticsearch中的一个属性。 数据的同步和满载是没有问题的。但我正努力提供一个好的"搜索体验,因为有许多不同的事情需要注意:
uax_url_email
标记生成器与keyword
数据类型结合使用)据我所知,multi_match
,类型cross_fields
将是一个不错的选择,但它不能进行模糊搜索和通配符。类型best_fields
也没有选项,因为它不能进行通配符搜索(据我所知)? most_fields
也不合适,phrase matching
无法模糊。
正因为如此,我目前正在使用simple_query_string
,例如:
在搜索字段中,我输入Tom fisher
:
simple_query_string
中的查询是:
(tom* | tom~1)+(fisher* | fisher~1)
现在我的问题是,仅仅拥有字段" entity_content",它包含所有字段的内容是不是一个坏主意?这就像我有一个.txt文档,其中包含有关此人的所有信息。
答案 0 :(得分:0)
默认情况下,Elastic有_all
字段,该字段已经是全部字段,例如所有信息都存储在该字段中,而不考虑它来自何处。
_all字段非常有用,尤其是在使用时探索新数据时 简单的过滤。但是,通过将字段值连接成一个大的 字符串,_all字段失去了短字段之间的区别 (更相关)和长领域(不太相关)。对于用例在哪里 搜索相关性很重要,最好查询单个字段 具体
_all字段不是免费的:它需要额外的CPU周期并使用更多 磁盘空间。如果不需要,可以完全禁用或自定义 在每个领域的基础上。