当前位置: 首页 > 知识库问答 >
问题:

Lucene 3.0.3数字术语查询

陈功
2023-03-14
    Document doc = new Document();
    String name = "geolongitude";
    NumericField numericField = new NumericField(name);
    double value = 29.0753505;
    String valueAsString = "29.0753505";
    numericField.setDoubleValue(value);
    doc.add(numericField);
    indexWriter.addDocument(doc);
    indexWriter.commit();
    indexWriter.close();
    IndexSearcher indexSearcher = new IndexSearcher(open);
    Query termQ = new TermQuery(new Term(name, valueAsString));
    TopDocs search = indexSearcher.search(termQ, 10);

在这种情况下,我没有得到任何结果。我试图弄清楚是否存在“NumericTermQuery”,但找不到。我可以做一些棘手的事情(为我正在搜索的术语做一个范围查询),但我不喜欢这个解决方案

谢谢你!

共有1个答案

闻人思聪
2023-03-14

数字字段不作为纯文本术语进行索引,因此将其字符串表示形式作为术语进行搜索将不起作用。

不管你喜不喜欢,构造一个NumericRangeQuery(其中min=max)确实是正确的方法:

Query query = NumericRangeQuery.newDoubleRange(name, value, value, true, true);

NumericRangeQuery的实现具体地、实际地识别了这种情况,并设计为能够很好地处理这种情况。

 类似资料:
  • 问题内容: 我有两种日志消息: 第一个消息是已发送消息的类型,第二个消息是确认消息已传递的消息。 它们之间的区别是后缀,我已将其与“ id”分开并可以对其进行查询。 这些消息将按以下格式解析并存储在elasticsearch中: 我想找出哪些消息已成功发送,哪些没有成功。我是Elasticsearch的初学者,所以我真的很努力。 我目前正在尝试术语聚合,但是我所能实现的就是以下代码: 向我显示已发

  • 我试图获取缺少字段“topic.description”和匹配项“fundedunder.programme”:“abc”的文档。 映射: 我的查询如下所示:

  • Tableau是一个功能强大的数据可视化工具; 这就是为什么Tableau有许多独特的术语和定义。在开始在Tableau中使用这些功能之前,应该了解它们的含义。 下面列出了最常用的Tableau术语: 别名:别名是可以分配给维度成员,测量部分或字段的替代方法。 Bin:Bin是数据源中用户定义的度量组。 书签:Tableau存储库中包含单个工作表的书签文件夹中的文档。它有助于改进数据分析。与Web

  • 问题内容: Elasticsearch的新功能,试图更好地了解这些查询之间的区别。据我所知,匹配单个项(需要小写的比赛工作?),都和文本字符串匹配。 问题答案: 查询匹配单个术语: 不分析 值。因此,不必根据所索引的内容将其小写。 如果您是在索引时间提供的,并且未分析该值,则以下查询将不会返回任何内容: 如果为查询字段定义了分析器,则查询将分析输入,并查找符合以下条件的文档: 所有条款 必须出现在

  • 这里是Elasticsearch的新内容,并试图更好地理解这些查询之间的差异。据我所知,匹配单个术语(需要小写才能有效匹配?),和都匹配一个文本字符串。