参考: https://www.phpmianshi.com/id=160
1.match查询首先将搜索词分词,分为“白雪”“公主”“苹果”,如“快速眼苹果”。 搜索包含相关内容的字段。
2.match_phrase查询match_phrase与slop一起使用以确保分词之间的邻近关系。 slop参数告诉match_phrase,无论match_phrase查询的词条相距多远,都将文档视为匹配,默认值为0。 如果为0,则必须相邻才能检索。
例如,以下语句也可以在“快速吃苹果”中搜索
gtmy _ index/_ search { ' query ' : { ' bool ' : } ' must ' : [ { ' match _ phrase ' : { ' content ' 3360
如果查询字段中定义了分词器,则使用分词器对输入进行分词,并返回满足以下两个条件的document:
1.match_phase中的所有term都将显示在查询字段中
2 .要查询的字段中的所有term必须与match_phase的顺序相同
3.wildcard查询使用通配符进行查询。 在这里? 表示任意字符的*表示任意一个或多个字符。
以下语句查找包含“公主”一词的内容。
gtmy _ index/_ search { ' query ' : { ' bool ' : } ' must ' : [ { ' wild card ' 3360 { ' content ' 3360 * ]
但是,通过在wildcard中模糊查询可以进行调查。 在搜索词的开头加上*吗? 检索性能会下降。 在大多数情况下,在后面放*可以满足需求。
4.regexp查询基于词条,正则表达式查询的性能很大程度上取决于所选择的正则表达式。 匹配所有内容(如. * )非常慢,并且使用环绕声正则表达式。 如果可能,请在开始正则表达式之前尝试使用长前缀。
像. *一样吗? 这样的通配符匹配程序会降低性能,所以请尽量不要使用。
gtmy _ index/_ search { ' query ' : { ' bool ' : { ' must ' : } { ' regexp ' : { ' content ' 3360 '公主}
参考: https://www.elastic.co/guide/en/elastic search/reference/6.2/query-DSL-regexp-query.html
5.prefix查询基于词条,查询如何开始的内容,前缀查询被映射到Lucene PrefixQuery。
如果满足你的需求,前缀匹配优于wildcard和regexp。
get comment/_ search { ' query ' : } ' bool ' : { ' must ' : [ { ' prefix ' : } ' content ' 3360 ' hh }