小编Jan*_*yne的帖子

elasticsearch有复合指数吗?

我想知道弹性搜索是否需要先验地定义复合索引.通过复合指数,我的意思是像mongodb那样的东西.

db.collection.ensureIndex({field1:1,field2:1,field3:1})

或类似mysql db的东西.

在mytable上创建索引adhoc_index(field1,field2,field3);

所以我处理的数据非常平坦(大多数只是csv格式).它看起来像以下(为了完整性).

field1,field2,...,fieldN

字段数是任意的.一个数据集可能有10个字段,另外20个,另外1000个.我基本上将每行转换为JSON文档,如下所示.

{
 "field1" : "value1",
 "field2" : "value2",
 ...
 "fieldN" : "valueN"
}
Run Code Online (Sandbox Code Playgroud)

将A,B和C表示为字段的三个互斥子集:{field1,field2,...,fieldN}.在任何给定的时间,我必须构建一个动态查询,过滤A = a,B = b和C = c的记录.

例如,

  • A = {field1},B = {field2,field3},C = {field6}
  • A = {field2},B = {field1},C = {field1000,field50}

所以我的elasticsearch DSL查询可能看起来像下面这样(不确定这是否正确,但只是为了说明).

"bool" : {
 "must" : [
  {"term" : { "field1" : "val1" },
  {"term" : { "field2" : "val2" },
  {"term" : { "field3" : "val3" },
  {"term" : { "field4" : "val4" }
 ]
} …
Run Code Online (Sandbox Code Playgroud)

lucene elasticsearch

4
推荐指数
1
解决办法
2483
查看次数

为什么cordova.file.documentsDirectory为null?

我想在http://ngcordova.com/docs/plugins/fileTransfer/上使用cordova-plugin-file-transfer

指定下载位置的示例代码如下.

var targetPath = cordova.file.documentsDirectory + "testImage.png";
Run Code Online (Sandbox Code Playgroud)

但是,此属性不存在.我已经登录console.log(JSON.stringify(cordova.file)),我得到以下输出(格式化).

{
    "applicationDirectory": "file:///android_asset/",
    "applicationStorageDirectory": "file:///data/data/com.ionicframework.mobile379071/",
    "dataDirectory": "file:///data/data/com.ionicframework.mobile379071/files/",
    "cacheDirectory": "file:///data/data/com.ionicframework.mobile379071/cache/",
    "externalApplicationStorageDirectory": "file:///storage/emulated/0/Android/data/com.ionicframework.mobile379071/",
    "externalDataDirectory": "file:///storage/emulated/0/Android/data/com.ionicframework.mobile379071/files/",
    "externalCacheDirectory": "file:///storage/emulated/0/Android/data/com.ionicframework.mobile379071/cache/",
    "externalRootDirectory": "file:///storage/emulated/0/",
    "tempDirectory": null,
    "syncedDataDirectory": null,
    "documentsDirectory": null,
    "sharedDirectory": null
}
Run Code Online (Sandbox Code Playgroud)

此外,我已经从https://cordova.apache.org/docs/en/dev/cordova-plugin-file/中获得了一些提示,并通过以下更改修改了我的config.xml.

<preference name="AndroidPersistentFileLocation" value="Internal" />
<preference name="iosPersistentFileLocation" value="Library" />
<preference name="iosExtraFilesystems" value="library,library-nosync,documents,documents-nosync,cache,bundle,root" />
<preference name="AndroidExtraFilesystems" value="files,files-external,documents,sdcard,cache,cache-external,root" />
Run Code Online (Sandbox Code Playgroud)

此代码不是在模拟器或浏览器上运行,而是真正的Android设备.关于为什么这个属性为null的任何想法?

当我尝试下载文件时,我得到的只是一个错误.我的代码如下所示.

$cordovaFileTransfer.download(url, path, {}, true)
    .then(function(result) { 
      console.log(JSON.stringify(result));
    }, function(err) { 
      console.log(JSON.stringify(err));
    }, function(progress) { 
      console.log(JSON.stringify(progress));
    });
Run Code Online (Sandbox Code Playgroud)

这是错误(格式化).

{
    "code": 1, …
Run Code Online (Sandbox Code Playgroud)

android angularjs cordova ionic-framework

4
推荐指数
1
解决办法
7223
查看次数

有没有办法在一个编译任务中使用gulp-typescript生成映射和声明文件?

我正在使用gulp - typescript将我的TypeScript代码转换为JavaScript.从本质上讲,我想为一个*.ts文件,还有待相应的*.js,*.d.ts*.map生成的文件.

在编译任务中,我注意到我只能通过声明与地图一起转换而不是同时转发.例如,有1个编译任务尝试生成声明+映射文件(使用JavaScript文件),如下所示不起作用.以下将生成JavaScript +映射文件,但不生成声明文件.

var tsc = require('gulp-typescript');
var sourcemaps = require('gulp-sourcemaps');
var tsProject = tsc.createProject('tsconfig.json');

gulp.task('compile', function () {
  var tsProject = tsc.createProject('tsconfig.json');
  var tsResult = gulp.src(['src/**/*.ts'])
    .pipe(sourcemaps.init())
    .pipe(tsProject());
  return tsResult.js
    .pipe(sourcemaps.write('.'))
    .pipe(gulp.dest('./dist/src'));
});
Run Code Online (Sandbox Code Playgroud)

tsconfig.json看起来如下.

{
    "include": [
        "src/**/*"
    ],
    "exclude": [
        "node_modules",
        "**/*.spec.ts"
    ],
    "compilerOptions": {
        "noImplicitAny": true,
        "target": "es6",
        "module": "commonjs",
        "alwaysStrict": true,
        "diagnostics": false,
        "listEmittedFiles": false,
        "listFiles": false,
        "pretty": true,
        "declaration": true
    } …
Run Code Online (Sandbox Code Playgroud)

typescript gulp tsconfig gulp-sourcemaps gulp-typescript

4
推荐指数
1
解决办法
1978
查看次数

CORS允许来源限制不会导致服务器拒绝请求(仍然可以在浏览器中访问该站点)

我正在使用Spring Boot v1.5.1,似乎我对CORS起源的限制不起作用.

我的application.properties文件包含以下行(ref1 ref2).

endpoints.cors.allowed-origins=http://mydomain.io
Run Code Online (Sandbox Code Playgroud)

我的REST控制器如下所示.

@RestController
@CrossOrigin
@RequestMapping("/api/car")
public class CarCtrl {
  @Autowired
  private CarService carService;

  @GetMapping
  public Car get() {
    return carService.getLatest();
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我打开浏览器并输入时,http://localhost:8080/api/car我仍然可以访问REST端点.

我也尝试按如下方式更改我的注释,但这不起作用.

@CrossOrigin("${endpoints.cors.allowed-origins}")
Run Code Online (Sandbox Code Playgroud)

关于我做错了什么的任何想法?

请注意,我没有WebMvcConfigurerAdapter像这篇文章那样使用.我是否真的需要扩展此类以明确控制原点?我认为@CrossOrigin除了属性文件设置之外的注释将能够控制允许的原点(而不是必须以编程方式执行).

java spring spring-mvc cors spring-boot

4
推荐指数
1
解决办法
1891
查看次数

散列字符串值会导致 Linux 和 Windows 上的 C++ 输出不同

我正在尝试散列单个std::stringstd::vector<std::string>值。我正在关注cppreferenceboost 中的示例。当代码在 Windows 和 Linux 上编译并运行时,我得到了不同的结果。

的头文件MyHasher.h如下。

class MyHasher {
 private:
  MyHasher() = delete;
 public:
  static std::size_t hash(std::vector<std::string> ids);
  static std::size_t hash(std::string s);
  static void hashCombine(std::size_t &seed, std::size_t value);
};
Run Code Online (Sandbox Code Playgroud)

CPP文件MyHasher.cpp如下。

std::size_t MyHasher::hash(std::vector<std::string> ids) {
  std::size_t seed = 0;
  for (auto id : ids) {
    std::size_t h = std::hash<std::string>{}(id);
    hashCombine(seed, h);
  }
  return seed;
}
std::size_t MyHasher::hash(std::string s) {
  std::size_t seed = 0;
  std::size_t h = std::hash<std::string>{}(s);
  hashCombine(seed, …
Run Code Online (Sandbox Code Playgroud)

c++ hash boost hashcode

4
推荐指数
1
解决办法
289
查看次数

maven v3.0.5找不到sqoop工件

我正在尝试使用maven v3.0.5和jdk 1.7构建我的项目.我的pom xml的片段如下所示.

<properties>
 <sqoop.version>1.4.4</sqoop.version>
</properties>
<dependencies>
 <dependency>
  <groupId>org.apache.sqoop</groupId>
  <artifactId>sqoop</artifactId>
  <version>${sqoop.version}</version>
 </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

当我运行"mvn clean package"时,我看到以下错误:

Could not find artifact org.apache.sqoop:sqoop:jar:1.4.4 in central (http://repo.maven.apache.org/maven2)
Run Code Online (Sandbox Code Playgroud)

通常,通常,我去mvnrepository.com,搜索工件,我可以在那里找到任何工件,我总是能够在我的pom.xml中简单地引用它们.根据这个链接http://mvnrepository.com/artifact/org.apache.sqoop/sqoop/1.4.4,这个工件应该存在吗?

我无法真正浏览http://repo.maven.apache.org/maven2.

Browsing for this directory has been disabled.
View this directory's contents on http://search.maven.org instead.
Run Code Online (Sandbox Code Playgroud)

所以我决定将搜索网站用于sqoop.

http://search.maven.org/#search%7Cga%7C1%7Csqoop
Run Code Online (Sandbox Code Playgroud)

在我看来,这个工件存在,但不知何故,我无法访问它.关于我做错什么的任何想法?

maven sqoop

3
推荐指数
1
解决办法
1059
查看次数

是否可以使用Spring的注释为Elasticsearch中的映射定义Completion Suggester?

我目前有以下POJO.

@Document(indexName="ws",type="vid")
public class Vid {
    @Id 
    private String id;

    @Field(type=FieldType.String, index=FieldIndex.not_analyzed)
    private List<String> tags;
}
Run Code Online (Sandbox Code Playgroud)

表示此POJO的JSON如下所示.

{ 
    "id" : "someId",
    "tags" : [ "one", "two", "three" ]
}
Run Code Online (Sandbox Code Playgroud)

我想要的是定义tags字段的映射,以便我可以在自动完成搜索框中使用这些值.这得到了Elasticsearch的Completion Suggester的支持.https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-completion.html上的文档似乎向我建议我必须按如下方式设置映射.

{
    "vid": {
        "properties": {
            "id": {
                "type": "string"
            },
            "tags": {
                "type": "completion",
                "index_analyzer": "simple",
                "search_analyzer": "simple",
                "payloads": true
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这意味着我必须修改我的POJO和JSON表示.

{
    "id": "someId",
    "tags": {
        "input": [ "one", "two", "three" ]
    }
}
Run Code Online (Sandbox Code Playgroud)

我在Completions Suggesters这里找到了另一个好的页面http://blog.qbox.io/quick-and-dirty-autocomplete-with-elasticsearch-completion-suggest.但是,该页面似乎表明了冗余tags …

java spring elasticsearch spring-data-elasticsearch elasticsearch-mapping

3
推荐指数
1
解决办法
2859
查看次数

创建 Kafka 主题导致没有领导者

我正在使用 Kafka v0.9.0.1 (Scala v2.11) 和com.101tec:zkclientv0.7。我正在尝试使用AdminUtils创建一个卡夫卡主题。我的代码如下。

String zkServers = "node1:2181,node2:2181,node3:2181,node4:2181";
Integer sessionTimeout = (int)TimeUnit.SECONDS.toMillis(10L);
Integer connectionTimeout = (int)TimeUnit.SECONDS.toMillis(8L);
ZkSerializer zkSerializer = ZKStringSerializer$.MODULE$;
Boolean isSecureKafkaCluster = false;
String topic = "test";
Integer partitions = 1;
Integer replication = 3;

ZkClient zkClient = new ZkClient(zkServers, sessionTimeout, connectionTimeout, zkSerializer);
ZkUtils zkUtils = new ZkUtils(zkClient, new ZkConnection(zkServers), isSecureKafkaCluster)
if(!AdminUtils.topicExists(zkUtils, topic)) {
 AdminUtils.createTopic(zkUtils, topic, partitions, replications, new Properties());
}
Run Code Online (Sandbox Code Playgroud)

通过以下命令验证该主题实际上已创建。

bin/kafka-topics.sh --describe --zookeeper node1:2181 --topic test
Run Code Online (Sandbox Code Playgroud)

然而,输出并不如预期。

主题:测试 PartitionCount:1 ReplicationFactor:1 配置: …

apache-kafka kafka-consumer-api kafka-producer-api

3
推荐指数
1
解决办法
1万
查看次数

Pip 不使用 install_requires 安装 setup.py 中声明的依赖项

在一个 Python 项目中,我install_requires在我setup.py的如下使用。

install_requires=['numpy', 'scipy', 'matplotlib']
Run Code Online (Sandbox Code Playgroud)

然后我按如下方式创建源代码、二进制文件和轮子。

python setup.py sdist bdist bdist_wheel
Run Code Online (Sandbox Code Playgroud)

当我发布时,我使用twine.

twine upload --repository dist/testpypi mypackage-0.1.1-py2-none-any.whl
Run Code Online (Sandbox Code Playgroud)

在 Python 2.7 conda 环境中,然后我尝试测试安装。

pip install -i https://test.pypi.org/simple/ mypackage==0.1.1
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误消息:

错误:找不到满足 matplotlib 要求的版本(来自 mypackage)(来自版本:无)
错误:找不到 matplotlib 的匹配发行版(来自 mypackage)

当我做 a pip listand 时conda list,确实没有matplotlib列出包。

我究竟做错了什么?我认为(这一点是我的理解崩溃的地方)install_requires会列出先决条件,并pip install会选择并自动安装要求?但是,install_requires如果尚未安装其声明的依赖项,它似乎可以防止安装包。

在某些 Internet 搜索中,他们似乎建议我包含一个requirements.txtvia MANIFEST.in(例如include requirements.txt),然后pip install将自动安装依赖项。但是,在尝试该方法后,我仍然收到相同的错误消息。我尝试requirements.txt如下。

matplotlib
Run Code Online (Sandbox Code Playgroud)

还有如下。

matplotlib>=2.2.3 …
Run Code Online (Sandbox Code Playgroud)

python pip matplotlib pypi

3
推荐指数
1
解决办法
1567
查看次数

如何在 Pandas 中分组、计数然后绘制条形图?

我有一个如下所示的Pandas数据框。

年月班
---- ----- -----
2015 1 1
2015 1 1
2015 1 2
2015 1 2
...

我希望能够在一个图上创建此数据的 2 个条形图系列。如果我可以做一个groupbycount并最终得到一个,data frame那么我想我可以做一个简单的dataframe.plot.barh.

我尝试过的是以下代码。

x = df.groupby(['year', 'month', 'class'])['class'].count()
Run Code Online (Sandbox Code Playgroud)

什么x最终被一个Series。那么我执行以下操作以获得DataFrame.

df = pd.DataFrame(x)
Run Code Online (Sandbox Code Playgroud)

这让我非常接近。数据最终如下所示。

                       克拉兹
年月克拉兹        
2015 1 1 2
     2 1 15
     2 2 45

但是当我做条形图时df.plot.bar(),我只看到一个系列。所需的输出只是一个系列,从 2015-01 到 2019-12,1class每月发生多少次?然后是另一个系列,从 2015-01 到 2019-12,2class每月发生多少次?

关于如何以这种方式操纵数据的任何想法?

python dataframe pandas

3
推荐指数
2
解决办法
5732
查看次数