elasticsearch 학습노트 고급편(6) - 사례에서 전체 텍스트 검색 결과의 정확도를 수동으로 제어하면
13582 단어 elasticsearch
데이터 준비:
POST /forum/_bulk
{ "index": { "_id": 1 }}
{ "articleID" : "XHDK-A-1293-#fJ3", "userID" : 1, "hidden": false, "postDate": "2017-01-01" }
{ "index": { "_id": 2 }}
{ "articleID" : "KDKE-B-9947-#kL5", "userID" : 1, "hidden": false, "postDate": "2017-01-02" }
{ "index": { "_id": 3 }}
{ "articleID" : "JODL-X-1937-#pV7", "userID" : 2, "hidden": false, "postDate": "2017-01-01" }
{ "index": { "_id": 4 }}
{ "articleID" : "QQPX-R-3956-#aD8", "userID" : 2, "hidden": true, "postDate": "2017-01-02" }
1. 게시물 데이터에 제목 필드 추가
POST /forum/_bulk
{ "update": { "_id": "1"} }
{ "doc" : {"title" : "this is java and elasticsearch blog"} }
{ "update": { "_id": "2"} }
{ "doc" : {"title" : "this is java blog"} }
{ "update": { "_id": "3"} }
{ "doc" : {"title" : "this is elasticsearch blog"} }
{ "update": { "_id": "4"} }
{ "doc" : {"title" : "this is java, elasticsearch, hadoop blog"} }
{ "update": { "_id": "5"} }
{ "doc" : {"title" : "this is spark blog"} }
2. 검색 제목에 자바 또는elasticsearch를 포함하는 블로그
이것은 이전의 그term filter/query와 다르다.exact value를 검색하는 것이 아니라full text 전체 텍스트 검색을 합니다.matchquery는 전체 텍스트 검색을 담당합니다.물론 검색할 필드가 not_이면analyzed 형식의, 그러면 matchquery도termquery에 해당한다
GET /forum/_search
{
"query": {
"match": {
"title": "java elasticsearch"
}
}
}
{
"took" : 1139,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 4,
"relation" : "eq"
},
"max_score" : 0.97797304,
"hits" : [
{
"_index" : "forum",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.97797304,
"_source" : {
"articleID" : "XHDK-A-1293-#fJ3",
"userID" : 1,
"hidden" : false,
"postDate" : "2017-01-01",
"tag" : [
"java",
"hadoop"
],
"tag_cnt" : 2,
"view_cnt" : 30,
"title" : "this is java and elasticsearch blog"
}
},
{
"_index" : "forum",
"_type" : "_doc",
"_id" : "4",
"_score" : 0.97797304,
"_source" : {
"articleID" : "QQPX-R-3956-#aD8",
"userID" : 2,
"hidden" : true,
"postDate" : "2017-01-02",
"tag" : [
"java",
"elasticsearch"
],
"tag_cnt" : 2,
"view_cnt" : 80,
"title" : "this is java, elasticsearch, hadoop blog"
}
},
{
"_index" : "forum",
"_type" : "_doc",
"_id" : "2",
"_score" : 0.57843524,
"_source" : {
"articleID" : "KDKE-B-9947-#kL5",
"userID" : 1,
"hidden" : false,
"postDate" : "2017-01-02",
"tag" : [
"java"
],
"tag_cnt" : 1,
"view_cnt" : 50,
"title" : "this is java blog"
}
},
{
"_index" : "forum",
"_type" : "_doc",
"_id" : "3",
"_score" : 0.57843524,
"_source" : {
"articleID" : "JODL-X-1937-#pV7",
"userID" : 2,
"hidden" : false,
"postDate" : "2017-01-01",
"tag" : [
"hadoop"
],
"tag_cnt" : 1,
"view_cnt" : 100,
"title" : "this is elasticsearch blog"
}
}
]
}
}
3. 검색 제목에 자바와elasticsearch를 포함하는 블로그
검색 결과를 정확하게 제어하는 첫 번째 단계는 and 키워드를 유연하게 사용하는 것입니다. 모든 검색 키워드가 일치하기를 원한다면 and를 사용하면 단순한 matchquery가 실현할 수 없는 효과를 실현할 수 있습니다.
GET /forum/_search
{
"query": {
"match": {
"title": {
"query": "java elasticsearch",
"operator": "and"
}
}
}
}
{
"took" : 6,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 0.97797304,
"hits" : [
{
"_index" : "forum",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.97797304,
"_source" : {
"articleID" : "XHDK-A-1293-#fJ3",
"userID" : 1,
"hidden" : false,
"postDate" : "2017-01-01",
"tag" : [
"java",
"hadoop"
],
"tag_cnt" : 2,
"view_cnt" : 30,
"title" : "this is java and elasticsearch blog"
}
},
{
"_index" : "forum",
"_type" : "_doc",
"_id" : "4",
"_score" : 0.97797304,
"_source" : {
"articleID" : "QQPX-R-3956-#aD8",
"userID" : 2,
"hidden" : true,
"postDate" : "2017-01-02",
"tag" : [
"java",
"elasticsearch"
],
"tag_cnt" : 2,
"view_cnt" : 80,
"title" : "this is java, elasticsearch, hadoop blog"
}
}
]
}
}
4. 자바,elasticsearch,spark,hadoop, 4개 키워드 중 최소 3개를 포함하는 블로그 검색
검색 결과의 정확도를 제어하는 두 번째 단계는 일부 키워드 중 적어도 몇 개의 키워드와 일치해야 결과로 되돌아갈 수 있도록 지정하는 것이다
GET /forum/_search
{
"query": {
"match": {
"title": {
"query": "java elasticsearch spark hadoop",
"minimum_should_match": 3
}
}
}
}
{
"took" : 4,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 2.2356422,
"hits" : [
{
"_index" : "forum",
"_type" : "_doc",
"_id" : "4",
"_score" : 2.2356422,
"_source" : {
"articleID" : "QQPX-R-3956-#aD8",
"userID" : 2,
"hidden" : true,
"postDate" : "2017-01-02",
"tag" : [
"java",
"elasticsearch"
],
"tag_cnt" : 2,
"view_cnt" : 80,
"title" : "this is java, elasticsearch, hadoop blog"
}
}
]
}
}
5. bool로 여러 검색 조건을 조합하여 title 검색
GET /forum/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "java"
}
}
],
"must_not": [
{
"match": {
"title": "spark"
}
}
],
"should": [
{
"match": {
"title": "hadoop"
}
},
{
"match": {
"title": "elasticsearch"
}
}
]
}
}
}
{
"took" : 12,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 3,
"relation" : "eq"
},
"max_score" : 2.2356422,
"hits" : [
{
"_index" : "forum",
"_type" : "_doc",
"_id" : "4",
"_score" : 2.2356422,
"_source" : {
"articleID" : "QQPX-R-3956-#aD8",
"userID" : 2,
"hidden" : true,
"postDate" : "2017-01-02",
"tag" : [
"java",
"elasticsearch"
],
"tag_cnt" : 2,
"view_cnt" : 80,
"title" : "this is java, elasticsearch, hadoop blog"
}
},
{
"_index" : "forum",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.97797304,
"_source" : {
"articleID" : "XHDK-A-1293-#fJ3",
"userID" : 1,
"hidden" : false,
"postDate" : "2017-01-01",
"tag" : [
"java",
"hadoop"
],
"tag_cnt" : 2,
"view_cnt" : 30,
"title" : "this is java and elasticsearch blog"
}
},
{
"_index" : "forum",
"_type" : "_doc",
"_id" : "2",
"_score" : 0.57843524,
"_source" : {
"articleID" : "KDKE-B-9947-#kL5",
"userID" : 1,
"hidden" : false,
"postDate" : "2017-01-02",
"tag" : [
"java"
],
"tag_cnt" : 1,
"view_cnt" : 50,
"title" : "this is java blog"
}
}
]
}
}
6. bool은 여러 개의 검색 조건을 조합하여relevancescore를 어떻게 계산합니까
must와should 검색에 대응하는 점수를 합치면 must와should의 총점수를 제외하면 1위는 자바,hadoop,elasticsearch를 포함하여 2위는 자바,elasticsearch를 포함하여 3위는 자바를 포함한다
should는 관련도 점수에 영향을 줄 수 있어요.
must는 누가 이 키워드를 가지고 있어야 하는지 확인하고, 이 must의 조건에 따라document가 이 검색 조건에 대한relevancescore를 계산합니다.must를 만족시키는 토대에서should의 조건은 일치하지 않아도 되지만 더 많이 일치하면document의relevancescore가 높아집니다.
7. should는 네 개의 키워드 중 적어도 세 개의 키워드를 검색할 수 있습니다
기본적으로, should는 어느 하나와도 일치하지 않을 수 있지만, 예외적인 상황이 있습니다. 만약must가 없다면, should 중 최소한 하나가 일치해야 합니다.
GET /forum/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"title": "java"
}
},
{
"match": {
"title": "elasticsearch"
}
},
{
"match": {
"title": "hadoop"
}
},
{
"match": {
"title": "spark"
}
}
],
"minimum_should_match": 3
}
}
}
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 2.2356422,
"hits" : [
{
"_index" : "forum",
"_type" : "_doc",
"_id" : "4",
"_score" : 2.2356422,
"_source" : {
"articleID" : "QQPX-R-3956-#aD8",
"userID" : 2,
"hidden" : true,
"postDate" : "2017-01-02",
"tag" : [
"java",
"elasticsearch"
],
"tag_cnt" : 2,
"view_cnt" : 80,
"title" : "this is java, elasticsearch, hadoop blog"
}
}
]
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
kafka connect e elasticsearch를 관찰할 수 있습니다.No menu lateral do dashboard tem a opção de connectors onde ele mostra todos os clusters do kafka connect conectados atu...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.