我可以使用Lucene查询ElasticSearch索引吗?
我使用ElasticSearch创建了一个索引,并插入了以下三个文档:
$ curl -XPOST localhost:9200/index1/type1 -d '{"f1":"dog"}'
$ curl -XPOST localhost:9200/index1/type2 -d '{"f2":"cat"}'
$ curl -XPOST localhost:9200/index1/type2 -d '{"f3":"horse"}'
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopScoreDocCollector;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import java.io.File;
public class TestES {
void doWork(String[] args) throws Exception {
// Index reader for already created ElasticSearch index
String indx1 = "/path-to-index/elasticsearch-0.90.0.RC2-SNAPSHOT/data/elasticsearch/nodes/0/indices/index1/1/index";
Directory index = FSDirectory.open(new File(indx1));
IndexReader reader = DirectoryReader.open(index);
IndexSearcher searcher = new IndexSearcher(reader);
// Looks like the query is correct since we do get a hit
StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_41);
Query q = new QueryParser(Version.LUCENE_41, "f2", analyzer).parse("cat");
TopScoreDocCollector collector = TopScoreDocCollector.create(10, true);
searcher.search(q, collector);
ScoreDoc[] hits = collector.topDocs().scoreDocs;
// We do get a hit, but results always displayed as null except for "_uid"
if (hits.length > 0) {
int docId = hits[0].doc;
Document d = searcher.doc(docId);
System.out.println("DocID " + docId + ", _uid: " + d.get("_uid") );
System.out.println("DocID " + docId + ", f2: " + d.get("f2") );
}
reader.close();
}
public static void main(String[] args) throws Exception {
TestES hl = new TestES();
hl.doWork(args);
}
}
Results:
DocID 0, _uid: type2#3K5QXeZhQnit9UXM9_4bng
DocID 0, f2: null
不幸的是,d.get(“_source”)也返回null。
如何检索匹配查询的文档字段?
谢谢你。
正如注释中所述,我需要以二进制值的形式检索字段“_source”。这样就成功了:d.getbinaryvalue(“_source”),它检索了[7b 22 66 32 22 3a 22 63 61 74 22 7d],它是{“f2”:“cat”}。贾瓦娜,谢谢你的帮助。
我的任务是使用lucene在我们的产品表中搜索。我已经创建了一个索引,正在使用带有多个字段的QueryParser进行搜索,但结果不是我所需要的。我有一个存储为LM10的产品,但如果搜索词是LM 10,我希望能够找到它,但如果搜索词是Fred LM10或Fred LM 10,它也必须能够匹配。你知道我如何在Lucene做到这一点吗。 提前谢谢
我正在使用Sitecore搜索数据库中的项目。
问题内容: 我有一个包含多个字段的索引,其中一个是字符串字段,我在其中存储产品的类别名称…例如“电子”,“家庭”,“花园”等 我正在执行布尔查询以按名称,价格和类别查找产品,但是我不确定如何执行“或”搜索,以便可以同时查询两个类别。 我当前的查询如下所示: 这对于一个类别的搜索来说效果很好,但是我不确定如何搜索将是两个类别的“ Electronics OR Home”。 问题答案: 您可以这样写:
问题内容: 我有两个表: 这是我的查询: 并为此: 它在第一个表上使用的全索引扫描进行排序,但不使用y索引进行连接(在解释中)。这对性能非常不利,并且会杀死整个数据库服务器,因为这是一个非常频繁的查询。 我尝试使用反转表顺序,但这给了,甚至更糟。 有什么办法可以使mysql同时使用索引进行连接和排序? ===更新=== 我真的很绝望。也许某种形式的非规范化可以在这里有所帮助? 问题答案: 如果您有
问题内容: 通配符*只能在单词的末尾使用,例如。 我想用like查询,该怎么做? 问题答案: Lucene提供了ReverseStringFilter,它允许执行通配符搜索,例如* user。它通过以相反顺序索引所有术语来工作。 但是我认为没有办法做类似’LIKE%user%’的事情。
问题内容: 当我将Flashlight与Firebase结合使用并通过直接查询进行Elastic搜索时,它确实起作用: 询问 码 但是,当我希望不仅限于10条提示时,此操作将失败(无结果) 询问 码 我使用Flashlight示例中提供的选项,并为option添加零件: 为什么可以在https://github.com/firebase/flashlight/issues/29#issuecomm