嗨,我是Elastic Search的新手,我想在scala中使用它,所以我在github上找到了一些代码示例,但是有一个非常复杂的例子给我一个初学者我花了一整天时间试图理解这个教程但是在最后我很困惑如何开始这个,它与其他Scala客户端示例相同,非常复杂
对于像我这样的新学习者来说,所有这些例子都非常复杂,因为我从它的指南中阅读弹性搜索的第一章然后我想用Scala进行语法编写这些相同的事情.请给我一些起点,从哪里开始学习并且还有一个请求不要将此问题标记为非建设性我先尝试自己然后我发布此问题,请我需要帮助我想学习弹性搜索使用scala
我有一个文档,我想在elasticSearch上编制索引,这个文档包含一些我事先无法知道的动态密钥,例如下面的例子中的"spanish"或"french"
"contents": {
"title": {
"spanish": "Hola amigos",
"french" : "Bonjour les amis"
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用elastic4s DSL来制作我的映射(通过createIndex DSL),但我无法找到如何使用此库创建基于"匹配"选项的动态映射(如此处所示),为了存储在路径contents.title下的每种语言,指定不同的分析器.
好吗?:-)
我们在ElasticSearch 2.2.0中使用了elastic4s.许多查询作为JSON存储在磁盘上,并通过elastic4s驱动程序用作rawQuery.结果中的分数在通过命令行提交的查询或elastic4s驱动程序之间不同.elastic4s驱动程序始终为所有结果返回得分1,而命令行执行产生两个不同的得分(针对不同的数据类型).
elastic4s的代码:
val searchResult = client.execute {
search in indexName types(product, company, orga, "User", "Workplace") rawQuery preparedQuery sourceInclude(preparedSourceField:_*) sort {sortDefintions:_*} start start limit limit
}.await
Run Code Online (Sandbox Code Playgroud)
请注意,我删除了任何内容,但rawQuery preparedQuery
没有更改分数1.通过命令行的完整查询很长:
{
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "${search}",
"fields": [
"name",
"abbreviation",
"articleNumberManufacturer",
"productLine",
"productTitle^10",
"productSubtitle",
"productDescription",
"manufacturerRef.name",
"props"
]
}
}
],
"filter": [
{
"or": [
{
"bool": {
"must": [
{
"type": {
"value": "Product"
}
},
{
"term": …
Run Code Online (Sandbox Code Playgroud) 在 Elasticsearch 中出现以下错误。
RemoteTransportException[[CN8keD-][127.0.0.1:9300][indices:data/write/update]]; 嵌套:RemoteTransportException[[CN8keD-][127.0.0.1:9300] 索引:数据/写入/更新[s]]];嵌套:MapperParsingException IOException[当前标记(START_OBJECT)不是数字,不能使用数字值访问器。
如何解决此错误?
假设我使用这样的代码:
ElasticClient client = ...
client.execute{search in "places"->"cities" query "paris" start 5 limit 10}
Run Code Online (Sandbox Code Playgroud)
如何查看已向Elasticsearch发送了哪些json请求?
使用Scala一段时间后,阅读所有地方,特别是在这里
我确定我知道何时使用curlies.作为一个经验法则,如果我想传递一个代码块来执行,我将使用花括号.
怎么这个令人讨厌的bug使用花括号使用elastic4s DSL浮出水面:
bool {
should {
matchQuery("title", title)
}
must {
termQuery("tags", category)
}
}
Run Code Online (Sandbox Code Playgroud)
编译为:
{
"bool" : {
"must" : {
"term" : {
"tags" : "tech"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用括号时:
bool {
should (
matchQuery("title", title)
) must (
termQuery("tags", category)
)
}
Run Code Online (Sandbox Code Playgroud)
给出正确的结果:
{
"bool" : {
"must" : {
"term" : {
"tags" : "tech"
}
},
"should" : {
"match" : {
"title" : {
"query" : "fake",
"type" : …
Run Code Online (Sandbox Code Playgroud) 我正在运行,ElasticSearch
在Docker
本地可用
$ curl http://192.168.99.100:9200/?pretty
{
"status" : 200,
"name" : "Collector",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "1.4.4",
"build_hash" : "c88f77ffc81301dfa9dfd81ca2232f09588bd512",
"build_timestamp" : "2015-02-19T13:05:36Z",
"build_snapshot" : false,
"lucene_version" : "4.10.3"
},
"tagline" : "You Know, for Search"
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Elastic4s进行连接ElasticSearch
,我尝试了以下方法,但所有这些都给了我错误
val client = ElasticClient.remote(host = "192.168.99.100", port = 9200)
Run Code Online (Sandbox Code Playgroud)
和
val settings = ImmutableSettings.settingsBuilder().put("cluster.name", "elasticsearch").build()
val uri = ElasticsearchClientUri("elasticsearch://192.168.99.100:9200")
val client = ElasticClient.remote(uri)
Run Code Online (Sandbox Code Playgroud)
错误是
Exception in thread "main" org.elasticsearch.client.transport.NoNodeAvailableException: None of …
Run Code Online (Sandbox Code Playgroud) 我试图通过使用elastic4s API和播放框架将一些数据索引到弹性搜索
我基本上是从控制器调用这个方法
def test(){
val client = ElasticClient.local
client.execute { create index "bands" }
client execute { index into "bands/singers" fields "name"->"chris martin" }
client.close()
}
Run Code Online (Sandbox Code Playgroud)
我没有在播放或弹性搜索日志中收到任何错误,
然后我检查了Sense插件,如果数据被索引,我得到了
{
"error": "IndexMissingException[[bands] missing]",
"status": 404
}
Run Code Online (Sandbox Code Playgroud)
看起来查询没有去服务器?...
我想用elastic4s构建一个动态查询.
我有一个名为myRequest的请求对象,有两个文件(fieldA和fieldB)
实际上我构建我的查询是这样的:
val req =
search in indexName -> indexType query {
bool {
should(
matchQuery("fieldA", myRequest.fieldA.getOrElse("")),
matchQuery("fieldB", myRequest.fieldA.getOrElse("")),
)
}
}
Run Code Online (Sandbox Code Playgroud)
但我想要的是:当fieldA为空时,我的查询中不会添加matchQuery
谢谢你的帮助
hbellahc.