我在 Elasticsearch 方面不是很擅長。我正在嘗試在我的應用程式中設定搜索并遇到一些奇怪的問題。我有兩個檔案:
{
"title": "Second insight"
"content": "Bla bla bla"
"library": "workspace"
}
{
"title": "Test source"
"content": "Bla bla bla"
"library": "workspace"
}
然后,我希望能夠通過像title和這樣的文本欄位進行搜索,content并在像library. 我有一個疑問:
{
"query": {
"bool": {
"should": [
{ "match": { "title": "insight" }}
],
"filter": [
{
"term": {
"library": "workspace"
}
}
]
}
}
}
盡管我明確定義title要匹配到insight,但上面的查詢回傳兩個檔案,而不僅僅是第一個。
如果我洗掉filter塊:
{
"query": {
"bool": {
"should": [
{ "match": { "title": "insight" }}
]
}
}
}
查詢回傳正確的結果。
然后,我也嘗試進行部分搜索。由于某些原因,查詢使用ins而不是insight下面不起作用,因此,它回傳空串列:
{
"query": {
"bool": {
"should": [
{ "match": { "title": "ins" }}
]
}
}
}
我應該如何進行部分搜索?以及如何正確設定過濾器?換句話說,如何通過某些欄位進行搜索部分查詢,但同時被其他欄位過濾?
謝謝。
uj5u.com熱心網友回復:
您需要minimum_should_match在第一個查詢中提供。
我做了以下,只得到一個檔案(你想要的結果)
POST test_things/_search
{
"query": {
"bool": {
"minimum_should_match": 1,
"should": [
{
"match": {
"title": "insight"
}
}
],
"filter": [
{
"term": {
"library": "workspace"
}
}
]
}
}
}
至于為什么ins不起作用,這取決于您使用的映射 分析器。您正在與索引中的分析詞進行匹配,如果您想匹配,則ins需要更改分析器(可能使用ngram tokenizer)或使用通配符查詢。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/345199.html
標籤:弹性搜索
