我目前正在将Elasticsearch作为搜索接口嵌入到现有的应用程序中。该应用程序是一个具有oracle SQL数据库的经典三层应用程序.
我有实体'Person‘(数据库表),具有以下属性:
到目前为止,我把它放在elasticsearch中,对于elasticsearch中的每一个db列都有一个属性。数据的同步和满载并不是问题。但我很难提供一种“好的”搜索体验,因为有很多不同的事情需要注意:
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文档,里面有关于这个人的所有信息。
发布于 2017-01-31 11:31:58
默认情况下,弹性有_all
字段,它已经是所有的字段,例如,所有的信息都存储在这个字段中,而不考虑它的来源。
_all字段可能很有用,特别是在使用简单过滤探索新数据时。但是,通过将字段值连接到一个大字符串中,_all字段就失去了短字段(更相关)和长字段(不太相关)之间的区别。对于搜索相关性很重要的用例,最好具体地查询各个字段。 _all字段不是免费的:它需要额外的CPU周期并使用更多的磁盘空间。如果不需要,它可以完全禁用或定制的基础上,每个领域.
https://stackoverflow.com/questions/41940790
复制相似问题