2017-02-17 27 views
0

Я индексирую URL-адреса с помощью python lucene.Функция Python lucene добавить содержимое поля в документ не работает

У меня были некоторые ошибки, пытающиеся добавить поля в документ. Я не знаю, почему. Ошибка говорит:

JavaError:,> Java StackTrace: java.lang.IllegalArgumentException: это не имеет смысла, чтобы иметь поле, которое не является ни проиндексированы и не хранится на org.apache.lucene.document. поле (Field.java:249)

в строке, где я поставил:. doc.add (поле ("содержимое", текст, t2))

код питона я использовал:

def IndexerForUrl(start, number, domain): 

lucene.initVM() 
# join base dir and index dir 
path = os.path.abspath("paths") 
directory = SimpleFSDirectory(Paths.get(path)) # the index 

analyzer = StandardAnalyzer() 

writerConfig = IndexWriterConfig(analyzer) 

writerConfig.setOpenMode(IndexWriterConfig.OpenMode.CREATE) 

writer = IndexWriter(directory, writerConfig) 

print "reading lines from sys.std..." 

# hashtable dictionary 
D = {} 

D[start] = [start] 



numVisited = 0 
wordBool = False 

n = start 

queue = [start] 
visited = set() 

t1 = FieldType() 
t1.setStored(True) 
t1.setTokenized(False) 

t2 = FieldType() 
t2.setStored(False) 
t2.setTokenized(True) 



while numVisited < number and queue and not wordBool: 
    pg = queue.pop(0) 

    if pg not in visited: 

     visited.add(pg) 

     htmlwebpg = urllib2.urlopen(pg).read() 
      # robot exclusion standard 
     rp = robotparser.RobotFileParser() 
     rp.set_url(pg) 
     rp.read() # read robots.txt url and feeds to parser 


     soup = BeautifulSoup(htmlwebpg, 'html.parser') 

     for script in soup(["script","style"]): 
      script.extract() 
     text = soup.get_text() 



     lines = (line.strip() for line in text.splitlines()) 
     chunks = (phrase.strip() for line in lines for phrase in line.split(" ")) 
     text = '\n'.join(chunk for chunk in chunks if chunk) 

     print text 




     doc = Document() 

     doc.add(Field("urlpath", pg, t2)) 
     if len(text)> 0: 
      doc.add(Field("contents", text, t2)) 
     else: 
      print "warning: no content in %s " % pgv 

     writer.addDocument(doc) 


     numVisited = numVisited+1 

     linkset = set() 

      # add to list 
     for link in soup.findAll('a', attrs={'href':re.compile("^http://")}): 
       #links.append(link.get('href')) 
      if rp.can_fetch(link.get('href')): 
       linkset.add(link.get('href')) 

      D[pg] = linkset 

      queue.extend(D[pg] - visited) 

writer.commit() 
writer.close() 
directory.close() #close the index 
return writer 

ответ

0

I f поле не индексируется и не хранится, оно никоим образом не будет представлено в индексе, поэтому для него не имеет смысла. Я предполагаю, что вы хотите индексировать FieldType t2. Для этого вам необходимо: set the IndexOptions, что-то вроде:

t2.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS) 
+0

Ох спасибо. Я попробую. –