Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 匹配lucene整个字段的精确值_Search_Lucene_Phrase - Fatal编程技术网

Search 匹配lucene整个字段的精确值

Search 匹配lucene整个字段的精确值,search,lucene,phrase,Search,Lucene,Phrase,我正在创建一个Lucene 4.10.3索引 我用的是标准分析仪 String indexpath="C:\\TEMP"; IndexWriterConfig iwc=newIndexWriterConfig(Version.LUCENE_4_10_3,new StandardAnalyzer(CharArraySet.EMPTY_SET)); Directory dir = FSDirectory.open(new File(indexpath));

我正在创建一个Lucene 4.10.3索引

我用的是标准分析仪

    String indexpath="C:\\TEMP";
    IndexWriterConfig iwc=newIndexWriterConfig(Version.LUCENE_4_10_3,new StandardAnalyzer(CharArraySet.EMPTY_SET)); 
    Directory dir = FSDirectory.open(new File(indexpath));          
    IndexWriter indexWriter = new IndexWriter(dir, iwc);
    iwc.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND);   
    Document doc = new Document();
    doc.add(new TextField("city", "ANDHRA",Store.YES));
    doc.add(new TextField("city", "ANDHRA PRADESH",Store.YES));
    doc.add(new TextField("city", "ASSAM AND NAGALAND",Store.YES));
    doc.add(new TextField("city", "ASSAM",Store.YES));
    doc.add(new TextField("city", "PUNJAB",Store.YES));
    doc.add(new TextField("city", "PUNJAB AND HARYANA",Store.YES));
    indexWriter.addDocument(doc);
当我尝试使用短语查询在lucene索引中搜索时

比如说

 try {
        QueryBuilder build=new QueryBuilder(new KeywordAnalyzer());
        Query q1=build.createPhraseQuery("city","ANDHRA");      
        Directory dir = FSDirectory.open(new File("C:\\TEMP"));
        DirectoryReader indexReader = DirectoryReader.open(dir);    
        IndexSearcher searcher = new IndexSearcher(indexReader);
        ScoreDoc hits[] = searcher.search(q1,10).scoreDocs;
        Set<String> set=new HashSet<String>();
        set.add("city");
        for (int i=0; i < hits.length; i++) {
            Document document = indexReader.document(hits[i].doc,set);
            System.out.println(document.get("city"));
        }
     } catch (IOException e) {
        e.printStackTrace();
     }
试试看{
QueryBuilder build=newquerybuilder(newkeywordanalyzer());
查询q1=build.createPhraseQuery(“城市”、“安得拉邦”);
Directory dir=FSDirectory.open(新文件(“C:\\TEMP”);
DirectoryReader indexReader=DirectoryReader.open(dir);
IndexSearcher=新的IndexSearcher(indexReader);
ScoreDoc hits[]=searcher.search(q1,10).scoreDocs;
Set=newhashset();
设置。添加(“城市”);
for(int i=0;i
我们得到的结果如下-

安得拉邦

安得拉邦

当我搜索“安得拉”时,如何只得到“安得拉”结果,
不是“安得拉邦”,如何使用StandardAnalyzer匹配lucene中的整个字段值?

如果您想匹配字段的准确、未修改和未加密的值,您根本不应该对其进行分析。只需使用
StringField
而不是
TextField

如果您需要一些分析(例如小写,或类似的),但不需要标记化,那么您可以在
分析器中使用
实现

如果使用
QueryParser
创建查询,请注意解析器如何使用空格分隔查询子句。您可能会发现有必要编写如下查询:
city:ANDHRA\PRADESH
(我不相信
QueryParser.escape
会帮您做到这一点)