forked from mattbaird/elastigo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
coremorelikethis.go
57 lines (52 loc) · 2.01 KB
/
coremorelikethis.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// Copyright 2013 Matthew Baird
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package elastigo
import (
"encoding/json"
"fmt"
)
// MoreLikeThis allows the caller to get documents that are “like” a specified document.
// http://www.elasticsearch.org/guide/reference/api/more-like-this.html
func (c *Conn) MoreLikeThis(index string, _type string, id string, args map[string]interface{}, query MoreLikeThisQuery) (BaseResponse, error) {
var url string
var retval BaseResponse
url = fmt.Sprintf("/%s/%s/%s/_mlt", index, _type, id)
body, err := c.DoCommand("GET", url, args, query)
if err != nil {
return retval, err
}
if err == nil {
// marshall into json
jsonErr := json.Unmarshal(body, &retval)
if jsonErr != nil {
return retval, jsonErr
}
}
return retval, err
}
type MoreLikeThisQuery struct {
MoreLikeThis MLT `json:"more_like_this"`
}
type MLT struct {
Fields []string `json:"fields"`
LikeText string `json:"like_text"`
PercentTermsToMatch float32 `json:"percent_terms_to_match"`
MinTermFrequency int `json:"min_term_freq"`
MaxQueryTerms int `json:"max_query_terms"`
StopWords []string `json:"stop_words"`
MinDocFrequency int `json:"min_doc_freq"`
MaxDocFrequency int `json:"max_doc_freq"`
MinWordLength int `json:"min_word_len"`
MaxWordLength int `json:"max_word_len"`
BoostTerms int `json:"boost_terms"`
Boost float32 `json:"boost"`
Analyzer string `json:"analyzer"`
}