我只是用mysql做了一堆测试,full text boolean mode从我的测试来看,似乎你不能在多个单词上使用减号?
我有两行例如..
id,name
1,2011-12 Fleer Retro auto jordan non
2,1999 jordan non auto
Run Code Online (Sandbox Code Playgroud)
如果我运行以下查询:
SELECT auction_id,`name`,description FROM auctions WHERE MATCH(`name`) AGAINST('+jordan +auto -non' IN BOOLEAN MODE);
Run Code Online (Sandbox Code Playgroud)
两行都没有按预期显示.但是,如果我运行此查询:
SELECT auction_id,`name`,description FROM auctions WHERE MATCH(`name`) AGAINST('+jordan +auto -"non auto"' IN BOOLEAN MODE);
Run Code Online (Sandbox Code Playgroud)
两行都不显示(相同的结果).不应该排1回来吗?
编辑:我ft_min_word_len的设置为2,我已禁用我的停用词文件,因此它与此无关.
小提琴:http://sqlfiddle.com/#!2/d1987/4
但是,似乎小提琴使用默认的停用词文件,因此使用"非"字测试它不起作用.
我正在尝试针对我的 elasticSearch 发送 bool 查询,以过滤掉文档。如何在 Java 中使用 BooleanQueryBuilder Api 过滤布尔表达式,如 (A AND B AND C) AND (D OR E OR F) AND G?我尝试使用过滤器方法,但没有得到任何结果。例如:
例如,假设 A、B、C、D、E、F、G 是属性“name”必须匹配“Robin”的事件。
private QueryBuilder getQueryBuilder() {
BoolQueryBuilder boolQueryBuilder1 = QueryBuilders
.boolQuery()
.filter(QueryBuilders.matchQuery(D).operator(Operator.OR))
.filter(QueryBuilders.matchQuery(E).operator(Operator.OR))
.filter(F);
BoolQueryBuilder boolQueryBuilder2 = QueryBuilders
.boolQuery()
.filter(QueryBuilders.matchQuery(A).operator(Operator.AND))
.filter(QueryBuilders.matchQuery(B).operator(Operator.AND))
.filter(QueryBuilders.matchQuery(C));
BoolQueryBuilder boolQueryBuilder3 = QueryBuilders
.boolQuery()
.filter(G);
BoolQueryBuilder boolQueryBuilder = QueryBuilders
.boolQuery()
.filter(boolQueryBuilder1)
.filter(boolQueryBuilder2)
.filter(boolQueryBuilder3);
return boolQueryBuilder;
}
Run Code Online (Sandbox Code Playgroud)
我知道这个例子不是很好,但我希望你能帮助我!谢谢!
我在布尔代数中遇到以下问题时出现问题,即
A + A'B = A + B.
我需要证明以上部分.我的意思是它已经减少了我不能进一步减少它.
我想按年份,格式和内容过滤一组文档.
n伪SQL:
SELECT * FROM /test/document
WHERE
((format=f1|| format=f2||...|| format=fn) AND
(Year!=2013 AND Year!=2015) AND
(content like %c1% || content like %c2% ||...|| content like %cn%))
Run Code Online (Sandbox Code Playgroud)
如您所见,格式和内容项的数量是动态的,将由用户选择.到目前为止,我想出了如何分别对每个字段进行动态查询,然后使用bool查询将它们组合起来,如下面的代码所示;
// For YEAR
QueryContainer qYear=null;
foreach (var year in years)
{
qYear |= new TermQuery() { Field = "year", Value = year };
}
// For FORMAT
var qformat = new List<QueryContainer>();
foreach (var format in txtDocs)
{
qformat.Add(Query<Document>.Match(m => m.OnField(p => p.Format).Query(format)));
}
// For CONTENT
var qc = new List<QueryContainer>();
qc.Add(Query<Document>.Match(m …Run Code Online (Sandbox Code Playgroud) 我想用loId=6 AND (actionType = "SAVE_DATA" OR 抓取所有文件actionType = "OPEN_SCREEN").
我写错了这个逻辑吗?
为什么我的查询返回0结果?
注意:我接受查询或过滤器来解决此问题.
这些是一些示例文档:
{
"_index": "logs",
"_type": "record",
"_id": "eIIt3vtrSxmdOVGClQmN3w",
"_score": 1,
"_source": {
"timestamp": 1373569919000,
"uid": 6,
"paId": 56298,
"loId": 6,
"prId": 2,
"vId": 6577,
"actionType": "SAVE_DATA"
}
},
{
"_index": "logs",
"_type": "record",
"_id": "yQGCia6qRYCImZLyH7DrEA",
"_score": 1,
"_source": {
"timestamp": 1373570314000,
"uid": 6,
"paId": 56641,
"loId": 6,
"prId": 2,
"vId": 6578,
"actionType": "CHECK_IN"
}
},
{
"_index": "logs",
"_type": "record",
"_id": "2raajrNKTKeRKG88wiNPpw",
"_score": 1, …Run Code Online (Sandbox Code Playgroud) 我必须使用Nest查询嵌套对象,但查询是以动态方式构建的.下面的代码演示了以静态方式对嵌套"书籍"使用查询
QueryContainer qry;
qry = new QueryStringQuery()
{
DefaultField = "name",
DefaultOperator = Operator.And,
Query = "salman"
};
QueryContainer qry1 = null;
qry1 = new RangeQuery() // used to search for range ( from , to)
{
Field = "modified",
GreaterThanOrEqualTo = Convert.ToDateTime("21/12/2015").ToString("dd/MM/yyyy"),
};
QueryContainer all = qry && qry1;
var results = elastic.Search<Document>(s => s
.Query(q => q
.Bool(qb => qb
.Must(all)))
.Filter(f =>
f.Nested(n => n
.Path("books")
.Filter(f3 => f3.And(
f1 => f1.Term("book.isbn", "122"),
f2 => f2.Term("book.author", "X")) …Run Code Online (Sandbox Code Playgroud) 我知道 && 和 || 的部分 编写更高效的代码,因为它们在链中进行的测试次数最少,并且一旦我们有足够的信息知道链的结果将是什么,就会立即爆发。
但是我在 Garrett Grolemund 的书中读到“...双运算符并不适用于所有地方。&& 和 || 不是矢量化的,这意味着它们只能在运算符的每一侧处理单个逻辑测试......”有人可以吗向我解释强调的部分是什么意思?
做了一些简单的测试,而 & 在两个逻辑向量的相应元素之间进行元素比较时,&& 只比较第一个元素并返回 TRUE,因为运算符没有被向量化?这就是上面强调的所有部分的意思,还是还有更多意思?
c(T, F, F, F, F) & c(T, T, F, T, F)
[1] TRUE FALSE FALSE FALSE FALSE
c(T, F, F, F, F) && c(T, T, F, T, F)
[1] TRUE
c(F, F, F, F, F) && c(T, T, F, T, F)
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
使用anyand将运算符任一侧的向量折叠为一个布尔值all。 …
我有 3 种类型的数据 [doctor,article,place],我想根据 bool 查询匹配他们的文档。但我想给医生类型提升 3,将类型提升为 2,文章提升为 1。我有一个使用function_score和bool query匹配文档的搜索查询。但问题是它抛出了一个异常,上面写着No function with the name [bool] is registered.. 这是我的查询:
GET /my_index/doctor,article,place/_search
{
"query": {
"function_score": {
"bool": {
"should":
[
{
"common": {
"title": {
"query":"$q",
"cutoff_frequency": 0.001,
"low_freq_operator": "and"
}
}
},
{
"prefix": {
"title": "$q"
}
},
{
"match_phrase_prefix" : {
"title" : {
"query": "$q",
"slop": 10
}
}
}
]
},
"functions":[
{
"filter":{
"type":{
"value":"doctor"
}
},
"weight":3
}, …Run Code Online (Sandbox Code Playgroud) (cond1 | cond2 | cond3 | ...)意思是“一组条件中的一个或多个是否为真?”any(cond1, cond2, cond3 ....)意思是“任何条件都为真?”因此,我们在这里不是说同样的话吗?
使用一种比另一种有什么优势吗?
我有一个弹性搜索索引,用于存储有关人员的信息.为了找到特定的人我有一些问题,每个人都可以单独工作但是当我使用Bool Query将它们组合起来时,我得到一个错误.
其中一个查询是模糊搜索名称
{
"query": {
"fuzzy_like_this": {
"fields": [
"firstname",
"lastname"
],
"like_text": "Peter"
}
}
}
Run Code Online (Sandbox Code Playgroud)
另一个问题是搜索出生在特定日期范围内的人
{
"query": {
"range": {
"birthdate": {
"from": "1988-12-30",
"to": "1993-12-30"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想结合这两个查询.我的布尔查询:
{
"query": {
"bool": {
"must": [
{
"query": {
"fuzzy_like_this": {
"fields": [
"firstname",
"lastname"
],
"like_text": "Peter"
}
}
},
{
"query": {
"range": {
"birthdate": {
"from": "1988-12-30",
"to": "1993-12-30"
}
}
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
虽然我单独使用它们时两个查询都可以正常工作,但在组合它们时我会收到错误.在我的索引中有人名字是彼得并且出生在这个日期范围内,但即使找不到人,我也应该得到0结果而不是错误.
错误说:"error":"SearchPhaseExecutionException [无法执行阶段[查询],所有分片都失败;嵌套:QueryParsingException [[indexname]没有为[query]注册查询] …