diff --git a/sweet/benchmarks/bleve-query/README.md b/sweet/benchmarks/bleve-query/README.md
deleted file mode 100644
index 6776a92..0000000
--- a/sweet/benchmarks/bleve-query/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# bleve-query Benchmark
-
-This directory contains a benchmark that queries a pre-built Bleve search index
-containing a small subset of Wikipedia.
-
-The benchmark is a heavily modified derivative of the
-[bleve-bench](https://github.com/blevesearch/bleve-bench) repository and thus
-partially retains its copyright as well as its Apache 2.0 license.
diff --git a/sweet/benchmarks/bleve-query/main.go b/sweet/benchmarks/bleve-query/main.go
deleted file mode 100644
index a616049..0000000
--- a/sweet/benchmarks/bleve-query/main.go
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build !aix && !plan9
-// +build !aix,!plan9
-
-package main
-
-import (
-	"flag"
-	"fmt"
-	"os"
-
-	"golang.org/x/benchmarks/sweet/benchmarks/internal/driver"
-
-	"github.com/blevesearch/bleve"
-	_ "github.com/blevesearch/bleve/analysis/analyzer/keyword"
-)
-
-var iterations int
-
-func init() {
-	flag.IntVar(&iterations, "iterations", 50, "number of times to iterate over the list of query terms")
-}
-
-func parseFlags() error {
-	flag.Parse()
-	if flag.NArg() != 1 {
-		return fmt.Errorf("expected bleve index directory as input")
-	}
-	return nil
-}
-
-func run(idxdir string, iterations int) error {
-	index, err := bleve.Open(idxdir)
-	if err != nil {
-		return err
-	}
-	return driver.RunBenchmark("BleveQuery", func(_ *driver.B) error {
-		for j := 0; j < iterations; j++ {
-			for _, term := range terms {
-				query := bleve.NewTermQuery(term)
-				query.SetField("Text")
-				_, err := index.Search(bleve.NewSearchRequest(query))
-				if err != nil {
-					return err
-				}
-			}
-		}
-		return nil
-	}, driver.InProcessMeasurementOptions...)
-}
-
-func main() {
-	driver.SetFlags(flag.CommandLine)
-	if err := parseFlags(); err != nil {
-		fmt.Fprintln(os.Stderr, err)
-		os.Exit(1)
-	}
-	if err := run(flag.Arg(0), iterations); err != nil {
-		fmt.Fprintln(os.Stderr, err)
-		os.Exit(1)
-	}
-}
diff --git a/sweet/benchmarks/bleve-query/terms.go b/sweet/benchmarks/bleve-query/terms.go
deleted file mode 100644
index 56526d1..0000000
--- a/sweet/benchmarks/bleve-query/terms.go
+++ /dev/null
@@ -1,302 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build !aix && !plan9
-// +build !aix,!plan9
-
-package main
-
-// TODO(mknyszek): Add more terms, approximately 50x more if possible.
-var terms = []string{
-	"water",
-	"education",
-	"time",
-	"pillar",
-	"genetics",
-	"philosophy",
-	"architecture",
-	"chemistry",
-	"literature",
-	"flower",
-	"oil",
-	"airplane",
-	"knowledge",
-	"technology",
-	"web",
-	"programming",
-	"physics",
-	"economics",
-	"garbage",
-	"television",
-	"history",
-	"war",
-	"earth",
-	"postage",
-	"moon",
-	"1962",
-	"basketball",
-	"soccer",
-	"waves",
-	"ocean",
-	"route",
-	"infrastructure",
-	"benchmark",
-	"helmet",
-	"bone",
-	"corn",
-	"taxi",
-	"corner",
-	"coroner",
-	"1981",
-	"1555",
-	"converse",
-	"organization",
-	"linear",
-	"correspondance",
-	"growth",
-	"capitalism",
-	"communism",
-	"show",
-	"passion",
-	"banana",
-	"monday",
-	"march",
-	"robot",
-	"work",
-	"email",
-	"collection",
-	"stamps",
-	"1886",
-	"providence",
-	"intelligence",
-	"alien",
-	"survival",
-	"fear",
-	"joy",
-	"accordion",
-	"tambourine",
-	"whale",
-	"dance",
-	"organism",
-	"beautiful",
-	"grace",
-	"winter",
-	"path",
-	"strawberry",
-	"scarf",
-	"head",
-	"snow",
-	"fall",
-	"rss",
-	"atomic",
-	"hiss",
-	"snake",
-	"ornery",
-	"tedious",
-	"interface",
-	"application",
-	"wikipedia",
-	"dictionary",
-	"thesaurus",
-	"dinosaur",
-	"meteor",
-	"island",
-	"climate",
-	"nuclear",
-	"fallout",
-	"orange",
-	"disagreement",
-	"shock",
-	"lightning",
-	"thunder",
-	"elemental",
-	"substantial",
-	"disagreement",
-	"agreement",
-	"dreams",
-	"muscle",
-	"apple",
-	"trouble",
-	"clash",
-	"quarrel",
-	"quiver",
-	"appearance",
-	"scarecrow",
-	"different",
-	"jar",
-	"form",
-	"style",
-	"tin",
-	"awkward",
-	"sound",
-	"june",
-	"rubbish",
-	"canine",
-	"teeth",
-	"aquatic",
-	"fish",
-	"riddance",
-	"good",
-	"bad",
-	"morality",
-	"quality",
-	"nonsense",
-	"dump",
-	"superlative",
-	"comparison",
-	"horrendous",
-	"fantastic",
-	"excellent",
-	"go",
-	"return",
-	"string",
-	"qubit",
-	"bit",
-	"nibble",
-	"standard",
-	"colloquial",
-	"critic",
-	"disparage",
-	"denounce",
-	"origin",
-	"exceed",
-	"expect",
-	"brain",
-	"context",
-	"abstract",
-	"syntax",
-	"tree",
-	"arbor",
-	"ogre",
-	"monster",
-	"sweater",
-	"clothing",
-	"apparel",
-	"shoe",
-	"foot",
-	"meter",
-	"metric",
-	"ordinary",
-	"artificer",
-	"stone",
-	"granite",
-	"composite",
-	"gopher",
-	"gobble",
-	"turkey",
-	"cranberry",
-	"egg",
-	"red",
-	"green",
-	"yellow",
-	"blue",
-	"purple",
-	"spectrum",
-	"light",
-	"luigi",
-	"space",
-	"deep",
-	"extravagant",
-	"order",
-	"prime",
-	"optimal",
-	"transformer",
-	"vehicle",
-	"halo",
-	"sword",
-	"shield",
-	"border",
-	"land",
-	"lord",
-	"rent",
-	"restore",
-	"curative",
-	"herb",
-	"horror",
-	"love",
-	"first",
-	"dirt",
-	"rescue",
-	"volcano",
-	"avalanche",
-	"tornado",
-	"disaster",
-	"relief",
-	"terror",
-	"rehabilitation",
-	"globe",
-	"second",
-	"third",
-	"direction",
-	"honey",
-	"bee",
-	"thing",
-	"escape",
-	"hive",
-	"horde",
-	"heavy",
-	"soft",
-	"star",
-	"sun",
-	"gas",
-	"astronomy",
-	"astrology",
-	"distant",
-	"speed",
-	"velocity",
-	"acceleration",
-	"mass",
-	"delta",
-	"alpha",
-	"beta",
-	"gamma",
-	"omega",
-	"ray",
-	"resistance",
-	"revolution",
-	"volt",
-	"electron",
-	"proton",
-	"quark",
-	"ignite",
-	"collide",
-	"colloid",
-	"suspension",
-	"mechanical",
-	"force",
-	"torsion",
-	"centripetal",
-	"centrifugal",
-	"orbit",
-	"jupiter",
-	"quantum",
-	"quantitative",
-	"state",
-	"vector",
-	"matrix",
-	"tensor",
-	"calculus",
-	"lambda",
-	"machine",
-	"revolve",
-	"spin",
-	"superposition",
-	"impose",
-	"crater",
-	"trench",
-	"ice",
-	"iceberg",
-	"arctic",
-	"cold",
-	"hot",
-	"degree",
-	"extent",
-	"span",
-	"molten",
-	"core",
-	"surge",
-	"tectonic",
-	"plate",
-	"fascinate",
-}
diff --git a/sweet/benchmarks/fogleman-fauxgl/README.md b/sweet/benchmarks/fogleman-fauxgl/README.md
deleted file mode 100644
index 152172a..0000000
--- a/sweet/benchmarks/fogleman-fauxgl/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# fogleman-fauxgl Benchmark
-
-This directory contains a benchmark of Michael Fogleman's FauxGL library which
-is an OpenGL-esque software rendering pipeline implemented in pure Go. It
-renders a given input mesh 72 times, rotating it by 5 degrees each time.
diff --git a/sweet/benchmarks/fogleman-fauxgl/main.go b/sweet/benchmarks/fogleman-fauxgl/main.go
deleted file mode 100644
index 012d924..0000000
--- a/sweet/benchmarks/fogleman-fauxgl/main.go
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package main
-
-import (
-	"flag"
-	"fmt"
-	"image"
-	"os"
-	"runtime"
-
-	"golang.org/x/benchmarks/sweet/benchmarks/internal/driver"
-	animatebench "golang.org/x/benchmarks/third_party/fogleman-fauxgl"
-)
-
-var im image.Image
-
-var imagesPerRotation int
-
-func init() {
-	flag.IntVar(&imagesPerRotation, "images-per-rotation", 72, "number of images per rotation to generate")
-}
-
-func main() {
-	driver.SetFlags(flag.CommandLine)
-	flag.Parse()
-
-	if flag.NArg() != 1 {
-		fmt.Fprintln(os.Stderr, "expected input STL file")
-		os.Exit(1)
-	}
-	inc := 360 / imagesPerRotation
-
-	// Load mesh into animation structure.
-	anim, err := animatebench.Load(flag.Arg(0))
-	if err != nil {
-		fmt.Fprintln(os.Stderr, err)
-		os.Exit(1)
-	}
-	err = driver.RunBenchmark("FoglemanFauxGLRenderRotateBoat", func(b *driver.B) error {
-		runtime.GC()
-		b.ResetTimer()
-		for i := 0; i < 360; i += inc {
-			im = anim.RenderNext()
-		}
-		return nil
-	}, driver.InProcessMeasurementOptions...)
-	if err != nil {
-		fmt.Fprintln(os.Stderr, err)
-		os.Exit(1)
-	}
-}
diff --git a/sweet/benchmarks/fogleman-pt/README.md b/sweet/benchmarks/fogleman-pt/README.md
deleted file mode 100644
index e9e8662..0000000
--- a/sweet/benchmarks/fogleman-pt/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# fogleman-fauxgl Benchmark
-
-This directory contains a benchmark of Michael Fogleman's `pt` library which
-is a pure-Go path tracing rendering library. It performs a given number of
-rendering iterations on the input mesh (which is expected to be a Go Gopher).
diff --git a/sweet/benchmarks/fogleman-pt/main.go b/sweet/benchmarks/fogleman-pt/main.go
deleted file mode 100644
index ec11d76..0000000
--- a/sweet/benchmarks/fogleman-pt/main.go
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package main
-
-import (
-	"flag"
-	"fmt"
-	"image"
-	"os"
-	"runtime"
-
-	"golang.org/x/benchmarks/sweet/benchmarks/internal/driver"
-	ptbench "golang.org/x/benchmarks/third_party/fogleman-pt"
-)
-
-var (
-	iter int
-	im   image.Image
-)
-
-func init() {
-	flag.Usage = func() {
-		fmt.Fprintf(flag.CommandLine.Output(), "Usage: %s [flags] <gopher.obj>\n", os.Args[0])
-		flag.PrintDefaults()
-	}
-	driver.SetFlags(flag.CommandLine)
-	flag.IntVar(&iter, "iter", 2, "number of iterations to run renderer for")
-}
-
-func main() {
-	flag.Parse()
-
-	if flag.NArg() != 1 {
-		fmt.Fprintln(os.Stderr, "expected one argument: gopher.obj")
-		os.Exit(1)
-	}
-
-	// load and transform gopher mesh
-	gopher, err := ptbench.Load(flag.Arg(0))
-	if err != nil {
-		fmt.Fprintf(os.Stderr, "%v\n", err)
-		os.Exit(1)
-	}
-
-	name := fmt.Sprintf("FoglemanPathTraceRenderGopherIter%d", iter)
-	err = driver.RunBenchmark(name, func(b *driver.B) error {
-		runtime.GC()
-		b.ResetTimer()
-		im = gopher.Render(iter)
-		return nil
-	}, driver.InProcessMeasurementOptions...)
-	if err != nil {
-		fmt.Fprintf(os.Stderr, "%v\n", err)
-		os.Exit(1)
-	}
-}
diff --git a/sweet/cmd/sweet/benchmark.go b/sweet/cmd/sweet/benchmark.go
index b8402fd..fa54a31 100644
--- a/sweet/cmd/sweet/benchmark.go
+++ b/sweet/cmd/sweet/benchmark.go
@@ -40,24 +40,6 @@
 		generator:   generators.BleveIndex(),
 	},
 	{
-		name:        "bleve-query",
-		description: "Queries a pre-built search index with keywords",
-		harness:     harnesses.BleveQuery(),
-		generator:   generators.BleveQuery{},
-	},
-	{
-		name:        "fogleman-fauxgl",
-		description: "Renders a rotating boat via an OpenGL-like software rendering pipeline",
-		harness:     harnesses.FoglemanFauxGL(),
-		generator:   generators.FoglemanFauxGL(),
-	},
-	{
-		name:        "fogleman-pt",
-		description: "Renders a Go gopher via path tracing",
-		harness:     harnesses.FoglemanPT(),
-		generator:   generators.FoglemanPT(),
-	},
-	{
 		name:        "go-build",
 		description: "Go build command",
 		harness:     harnesses.GoBuild{},
@@ -104,8 +86,6 @@
 		allBenchmarksMap["biogo-igor"],
 		allBenchmarksMap["biogo-krishna"],
 		allBenchmarksMap["bleve-index"],
-		allBenchmarksMap["bleve-query"],
-		allBenchmarksMap["fogleman-pt"],
 		allBenchmarksMap["go-build"],
 		allBenchmarksMap["gopher-lua"],
 		// TODO(go.dev/issue/51445): Enable once gVisor builds with Go 1.19.
@@ -113,19 +93,9 @@
 		allBenchmarksMap["markdown"],
 		allBenchmarksMap["tile38"],
 	}
-	if runtime.GOARCH != "arm64" {
-		// TODO(go.dev/issue/54760): fogleman-fauxgl hangs on arm64.
-		m["default"] = append(m["default"], allBenchmarksMap["fogleman-fauxgl"])
-	}
 
 	for i := range allBenchmarks {
 		switch allBenchmarks[i].name {
-		case "fogleman-fauxgl":
-			if runtime.GOARCH == "arm64" {
-				// TODO(go.dev/issue/54760): fogleman-fauxgl
-				// hangs on arm64.
-				continue
-			}
 		case "gvisor":
 			// TODO(go.dev/issue/51445): Include in "all"
 			// once gVisor builds with Go 1.19.
diff --git a/sweet/cmd/sweet/integration_test.go b/sweet/cmd/sweet/integration_test.go
index 7c4b4d5..4bb60ed 100644
--- a/sweet/cmd/sweet/integration_test.go
+++ b/sweet/cmd/sweet/integration_test.go
@@ -167,10 +167,10 @@
 	sema := semaphore.NewWeighted(2)
 	var wg sync.WaitGroup
 	for i, shard := range []string{
-		"tile38", "go-build", "biogo-igor", "biogo-krishna", "bleve-query",
+		"tile38", "go-build", "biogo-igor", "biogo-krishna",
 		// TODO(go.dev/issue/51445): Enable once gVisor builds with Go 1.19.
 		// "gvisor",
-		"fogleman-pt", "bleve-index,fogleman-fauxgl,gopher-lua,markdown",
+		"bleve-index,gopher-lua,markdown",
 	} {
 		sema.Acquire(context.Background(), 1)
 		wg.Add(1)
diff --git a/sweet/generators/bleve-query.go b/sweet/generators/bleve-query.go
deleted file mode 100644
index b667fe1..0000000
--- a/sweet/generators/bleve-query.go
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build !aix && !plan9
-// +build !aix,!plan9
-
-package generators
-
-import (
-	"compress/bzip2"
-	"io"
-	"os"
-	"path/filepath"
-
-	"github.com/blevesearch/bleve"
-	_ "github.com/blevesearch/bleve/analysis/analyzer/keyword"
-	wikiparse "github.com/dustin/go-wikiparse"
-
-	"golang.org/x/benchmarks/sweet/common"
-	blevebench "golang.org/x/benchmarks/third_party/bleve-bench"
-)
-
-// documents is the number of documents to index.
-const documents = 25000
-
-// wikiDumpPath is a path to the static asset from
-// which we'll build our index.
-var wikiDumpPath = filepath.Join("..", "bleve-index", wikiDumpName)
-
-// BleveQuery is a dynamic assets Generator for the bleve-query benchmark.
-type BleveQuery struct{}
-
-// Generate creates a persistent index for the Bleve search engine for
-// the bleve-query benchmark. It generates this index from a subset of
-// the static assets for the bleve-index benchmark, a dump of wikipedia
-// from 2008.
-func (_ BleveQuery) Generate(cfg *common.GenConfig) (err error) {
-	// Copy README.md over.
-	if err := copyFiles(cfg.OutputDir, cfg.AssetsDir, []string{"README.md"}); err != nil {
-		return err
-	}
-
-	f, err := os.Open(filepath.Join(cfg.AssetsDir, wikiDumpPath))
-	if err != nil {
-		return err
-	}
-	defer f.Close()
-
-	z := bzip2.NewReader(f)
-
-	parser, err := wikiparse.NewParser(z)
-	if err != nil {
-		return err
-	}
-
-	// Create a new Bleve index with on-disk
-	// storage in the output directory.
-	mapping := blevebench.ArticleMapping()
-	outputDir := filepath.Join(cfg.OutputDir, "index")
-	index, err := bleve.New(outputDir, mapping)
-	if err != nil {
-		return err
-	}
-	defer func() {
-		// Make sure we close the index so the data
-		// persists to disk.
-		cerr := index.Close()
-		if err == nil {
-			err = cerr
-		}
-	}()
-
-	todo := ^uint64(0)
-	if documents >= 0 {
-		todo = uint64(documents)
-	}
-
-	// Create batches of wikipedia articles
-	// and index them.
-	const batchSize = 256
-	b := index.NewBatch()
-	for i := uint64(0); i < todo; i++ {
-		p, err := parser.Next()
-		if err == io.EOF {
-			break
-		} else if err != nil {
-			return err
-		}
-		if len(p.Revisions) == 0 {
-			continue
-		}
-		b.Index(p.Title, blevebench.Article{
-			Title: p.Title,
-			Text:  p.Revisions[0].Text,
-		})
-		if b.Size() >= batchSize {
-			if err := index.Batch(b); err != nil {
-				return err
-			}
-			b = index.NewBatch()
-		}
-	}
-	if b.Size() != 0 {
-		if err := index.Batch(b); err != nil {
-			return err
-		}
-	}
-	return nil
-}
diff --git a/sweet/generators/bleve-query_unsupported.go b/sweet/generators/bleve-query_unsupported.go
deleted file mode 100644
index 65d2fa8..0000000
--- a/sweet/generators/bleve-query_unsupported.go
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build aix || plan9
-// +build aix plan9
-
-package generators
-
-import (
-	"fmt"
-	"runtime"
-
-	"golang.org/x/benchmarks/sweet/common"
-)
-
-// BleveQuery is a dynamic assets Generator for the bleve-query benchmark.
-type BleveQuery struct{}
-
-// Generate cannot run on these platforms.
-func (_ BleveQuery) Generate(_ *common.GenConfig) (err error) {
-	return fmt.Errorf("platform %s/%s unsupported", runtime.GOOS, runtime.GOARCH)
-}
diff --git a/sweet/generators/copy.go b/sweet/generators/copy.go
index 9163015..0ef8d2a 100644
--- a/sweet/generators/copy.go
+++ b/sweet/generators/copy.go
@@ -68,23 +68,6 @@
 	}}
 }
 
-func FoglemanFauxGL() common.Generator {
-	return &copyStatic{assets: []string{
-		"3dbenchy.stl",
-		"README.md",
-		"LICENSE",
-	}}
-}
-
-func FoglemanPT() common.Generator {
-	return &copyStatic{assets: []string{
-		"gopher.mtl",
-		"gopher.obj",
-		"README.md",
-		"LICENSE",
-	}}
-}
-
 func GopherLua() common.Generator {
 	return &copyStatic{
 		assets: []string{
diff --git a/sweet/harnesses/local.go b/sweet/harnesses/local.go
index 169d3ad..5982f6f 100644
--- a/sweet/harnesses/local.go
+++ b/sweet/harnesses/local.go
@@ -91,51 +91,6 @@
 	}
 }
 
-func BleveQuery() common.Harness {
-	return &localBenchHarness{
-		binName: "bleve-query-bench",
-		genArgs: func(cfg *common.Config, rcfg *common.RunConfig) []string {
-			args := []string{filepath.Join(rcfg.AssetsDir, "index")}
-			if rcfg.Short {
-				args = append([]string{"-iterations", "1"}, args...)
-			}
-			return args
-		},
-		beforeRun: func(cfg *common.Config, rcfg *common.RunConfig) error {
-			// Make sure all the index passed to the benchmark is writeable.
-			indexPath := filepath.Join(rcfg.AssetsDir, "index")
-			return makeWriteable(indexPath)
-		},
-	}
-}
-
-func FoglemanFauxGL() common.Harness {
-	return &localBenchHarness{
-		binName: "fogleman-fauxgl-bench",
-		genArgs: func(cfg *common.Config, rcfg *common.RunConfig) []string {
-			args := []string{filepath.Join(rcfg.AssetsDir, "3dbenchy.stl")}
-			if rcfg.Short {
-				args = append([]string{"-images-per-rotation", "1"}, args...)
-			}
-			return args
-		},
-		noStdout: true,
-	}
-}
-
-func FoglemanPT() common.Harness {
-	return &localBenchHarness{
-		binName: "fogleman-pt-bench",
-		genArgs: func(cfg *common.Config, rcfg *common.RunConfig) []string {
-			return []string{
-				"-iter", "1",
-				filepath.Join(rcfg.AssetsDir, "gopher.obj"),
-			}
-		},
-		noStdout: true,
-	}
-}
-
 func GopherLua() common.Harness {
 	return &localBenchHarness{
 		binName: "gopher-lua-bench",
